返回

让体重管理轻松一刻,定制化体重记录应用(二)

前端

前言

在上一篇文章中,我们已经完成了应用的基础框架搭建。本文将继续完善应用的功能,重点介绍体重记录页面的开发。我们将使用Node.js + TypeScript作为后端框架,并使用云数据库作为数据存储。

体重记录页面的开发

初始化后端Node+TypeScript项目

首先,我们需要初始化我们的后端Node+TypeScript项目。我们可以使用以下命令来完成:

npx create-react-app my-weight-tracker-backend --template @typescript

这将创建一个新的Node+TypeScript项目。接下来,我们需要安装必要的依赖项:

npm install express body-parser cors mysql

这些依赖项将帮助我们构建我们的后端API。

数据库设计

接下来,我们需要设计我们的数据库。我们将使用MySQL作为我们的数据库。我们的数据库将包含一个名为weights的表,该表将存储用户的体重记录。weights表的结构如下:

CREATE TABLE weights (
  id INT NOT NULL AUTO_INCREMENT,
  user_id INT NOT NULL,
  weight FLOAT NOT NULL,
  date DATETIME NOT NULL,
  PRIMARY KEY (id)
);

接口设计

接下来,我们需要设计我们的API接口。我们将使用Express作为我们的API框架。我们的API将包含以下接口:

  • GET /weights:获取所有用户的体重记录
  • POST /weights:添加新的体重记录
  • PUT /weights/:id:更新现有体重记录
  • DELETE /weights/:id:删除现有体重记录

云数据库初始化

接下来,我们需要初始化我们的云数据库。我们可以使用以下命令来完成:

mysql -u root -p

这将打开MySQL命令行界面。接下来,我们需要创建我们的数据库:

CREATE DATABASE my_weight_tracker;

接下来,我们需要授予用户对数据库的访问权限:

GRANT ALL PRIVILEGES ON my_weight_tracker.* TO 'username'@'localhost' IDENTIFIED BY 'password';

数据库操作方法封装

最后,我们需要封装我们的数据库操作方法。我们可以创建一个名为db.js的文件,并在其中封装我们的数据库操作方法。我们的db.js文件如下:

const mysql = require('mysql');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'my_weight_tracker'
});

exports.getAllWeights = () => {
  return new Promise((resolve, reject) => {
    pool.query('SELECT * FROM weights', (err, results) => {
      if (err) {
        reject(err);
      } else {
        resolve(results);
      }
    });
  });
};

exports.addWeight = (weight) => {
  return new Promise((resolve, reject) => {
    pool.query('INSERT INTO weights (user_id, weight, date) VALUES (?, ?, ?)', [weight.user_id, weight.weight, weight.date], (err, results) => {
      if (err) {
        reject(err);
      } else {
        resolve(results);
      }
    });
  });
};

exports.updateWeight = (weight) => {
  return new Promise((resolve, reject) => {
    pool.query('UPDATE weights SET weight = ?, date = ? WHERE id = ?', [weight.weight, weight.date, weight.id], (err, results) => {
      if (err) {
        reject(err);
      } else {
        resolve(results);
      }
    });
  });
};

exports.deleteWeight = (id) => {
  return new Promise((resolve, reject) => {
    pool.query('DELETE FROM weights WHERE id = ?', [id], (err, results) => {
      if (err) {
        reject(err);
      } else {
        resolve(results);
      }
    });
  });
};

结语

至此,我们就完成了体重记录页面的开发。在下一篇文章中,我们将继续完善应用的功能,并介绍如何使用该应用。