Node.js + Express + Docker + MySQL + JWT:构建用户管理RESTful API
2023-09-04 21:50:44
引言
RESTful API是一种流行的应用程序编程接口(API),它遵循代表性状态转移(REST)的原则。RESTful API使用统一的资源标识符(URI)来标识资源,并使用标准的HTTP方法(如GET、POST、PUT和DELETE)来操纵这些资源。
在本文中,我们将使用Node.js和Express框架来构建一个简单的用户管理RESTful API。我们将使用MySQL作为数据库,并使用JWT(JSON Web令牌)来处理用户身份验证和授权。最后,我们将使用Docker来容器化和部署应用程序。
先决条件
在开始之前,您需要确保您的系统满足以下先决条件:
- Node.js 12或更高版本
- Express框架
- MySQL数据库服务器
- Docker引擎
设置项目
首先,我们需要创建一个新的Node.js项目。您可以使用以下命令:
mkdir user-management-api
cd user-management-api
npm init -y
接下来,我们需要安装必要的依赖项。您可以使用以下命令:
npm install express mysql2 body-parser jsonwebtoken
创建数据库
接下来,我们需要创建一个MySQL数据库。您可以使用以下命令:
mysql -u root -p
CREATE DATABASE user_management_api;
定义模型
接下来,我们需要定义我们的用户模型。我们将使用Sequelize ORM来简化与MySQL数据库的交互。您可以使用以下命令安装Sequelize:
npm install sequelize
接下来,我们需要创建一个Sequelize模型文件。您可以使用以下命令创建文件:
touch models/user.js
然后,您可以将以下代码添加到文件中:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('user_management_api', 'root', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: {
type: Sequelize.STRING,
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false
}
});
User.sync();
module.exports = User;
编写API端点
接下来,我们需要编写API端点。我们将使用Express框架来创建API端点。您可以使用以下命令创建API端点文件:
touch routes/users.js
然后,您可以将以下代码添加到文件中:
const express = require('express');
const router = express.Router();
const User = require('../models/user');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
// 用户注册
router.post('/register', async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({
username,
password: hashedPassword
});
res.json({
message: '用户注册成功',
data: user
});
});
// 用户登录
router.post('/login', async (req, res) => {
const { username, password } = req.body;
const user = await User.findOne({
where: {
username
}
});
if (!user) {
return res.status(404).json({
message: '用户不存在'
});
}
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) {
return res.status(401).json({
message: '密码错误'
});
}
const token = jwt.sign({
id: user.id,
username: user.username
}, 'secret', {
expiresIn: '1h'
});
res.json({
message: '用户登录成功',
data: {
token
}
});
});
// 获取用户信息
router.get('/profile', async (req, res) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({
message: '未授权'
});
}
const decodedToken = jwt.verify(token, 'secret');
const user = await User.findByPk(decodedToken.id);
if (!user) {
return res.status(404).json({
message: '用户不存在'
});
}
res.json({
message: '获取用户信息成功',
data: user
});
});
module.exports = router;
容器化和部署应用程序
接下来,我们需要使用Docker来容器化和部署应用程序。您可以使用以下命令创建Dockerfile文件:
touch Dockerfile
然后,您可以将以下代码添加到文件中:
FROM node:12
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
接下来,您可以使用以下命令构建Docker镜像:
docker build -t user-management-api .
最后,您可以使用以下命令运行Docker容器:
docker run -p 3000:3000 user-management-api
结论
在本文中,我们介绍了如何使用Node.js、Express、Docker、MySQL和JWT来构建一个简单的用户管理RESTful API。我们介绍了如何设置项目、创建数据库、定义模型、编写API端点,以及如何使用Docker容器化和部署应用程序。