node+mysql+express项目-文章管理平台-注册登录及信息增删改查
cnpm install --save express cors mysql body-parser bcryptjs joi @escook/express-joi jsonwebtoken express-jwt multer
一、项目初始化
1.1 创建项目
- 新建 service_mytest 文件夹作为项目根目录,并在项目根目录中运行命令 npm init -y,初始化包管理配置文件。
- 运行命令 cnpm install --save express (会保存到)
或安装特定版本的 express:npm i express@4.17.1
- 在项目根目录中新建 index.js 作为整个项目的入口文件,并初始化如下的代码:
const express = require('express')
// 创建 express 的服务器实例
const app = express()
//指定端口为环境变量PORT中的内容,如果没有,则为8888
const port = process.env.PORT || 8888;
// write your code here...
// 调用 app.listen 方法,指定端口号并启动web服务器
/* app.listen(8000, function () {
console.log('server running on port http://127.0.0.1:8000')
}) */
app.listen(port, () => {
console.log(`server running on port ${
port}`);
});
1.2 配置 cors 跨域
- 运行命令 cnpm install --save cors,安装 cors 中间件。
或 npm i cors@2.8.5
- 在 index.js 中导入并配置 cors 中间件:
const cors = require('cors')
app.use(cors())
1.3 配置解析表单数据的中间件
- 运行命令cnpm install --save body-parser
const bodyParser = require("body-parser");
//通过如下的代码,配置解析 application/x-www-form-urlencoded 格式的表单数据的中间件:
app.use(express.urlencoded({
extended: false }));
//通过如下的代码,配置解析 application/json格式的表单数据的中间件:
app.use(bodyParser.json());
1.4 初始化路由相关的文件夹
- 在项目根目录中,新建 router 文件夹,用来存放所有的路由模块
路由模块中,只存放客户端的请求与处理函数之间的映射关系
- 在项目根目录中,新建 router_handler 文件夹,用来存放所有的 路由处理函数模块
路由处理函数模块中,专门负责存放每个路由对应的处理函数
1.5 初始化用户路由模块
- 在 router 文件夹中,新建 user.js 文件,作为用户的路由模块,并初始化代码:
const express = require('express')
// 创建路由对象
const router = express.Router()
// 注册新用户
router.post('/reguser', (req, res) => {
res.send('reguser OK')
})
// 登录
router.post('/login', (req, res) => {
res.send('login OK')
})
module.exports = router
- index.js 中,导入注册用户路由模块 :
const userRouter = require('./router/user')
app.use('/api', userRouter)
1.6 抽离用户路由模块中的处理函数
目的:为了保证 路由模块 的纯粹性,所有的 路由处理函数,必须抽离到对应的 路由处理函数模块 中
- 在 /router_handler/user.js 中,使用 exports 对象,分别向外共享如下两个 路由处理函数 :
/**
* 在这里定义和用户相关的路由处理函数,供 /router/user.js 模块进行调用
*/
// 注册用户的处理函数
exports.regUser = (req, res) => {
res.send('reguser OK')
}
// 登录的处理函数
exports.login = (req, res) => {
res.send('login OK')
}
- 将 /router/user.js 中的代码修改为如下结构:
const express = require('express')
const router = express.Router()
// 导入用户路由处理函数模块
const userHandler = require('../router_handler/user')
// 注册新用户
router.post('/reguser', userHandler.regUser)
// 登录
router.post('/login', userHandler.login)
module.exports = router
二. 登录注册
2.1 新建 ev_users 表
- 在 test 数据库中,新建 ev_users 表如下:
2.2 安装并配置 mysql 模块
- 运行命令 cnpm install --save mysql , 安装 mysql 模块,
或npm i mysql@2.18.1
- 在项目根目录中新建 /db/index.js 文件,在此自定义模块中创建数据库的连接对象:
const mysql = require('mysql'); //createPool
// options参数包含createConnection方法中可以使用的各种属性
// 创建数据库连接对象
db = mysql.createConnection({
host:'127.0.0.1',
user: 'root',
password: '123456', // 修改为你的密码
port: '3306',
database: 'test' // 请确保数据库存在
});
//db.connect();
// 向外共享 db 数据库连接对象
module.exports = db;
2.3 注册
实现步骤
- 检测表单数据是否合法
- 检测用户名是否被占用
- 对密码进行加密处理
- 插入新用户
2.3.1 检测表单数据是否合法
- 判断用户名和密码是否为空: /router_handler/user.js
// 注册用户的处理函数
exports.regUser = (req, res) => {
// 接收表单数据
const userinfo = req.body
// 判断数据是否合法
if (!userinfo.username || !userinfo.password) {
return res.send({
status: 1, message: '用户名或密码不能为空!' })
}
res.send('reguser OK')
}