场景:用户登录
1、下载插件,用于校验字段
npm i express-validator@7.1.0
2、引入插件
const { check, validationResult } = require('express-validator')
3、校验字段
const loginRules = [
check('username').notEmpty().withMessage('用户名为必填项'),
check('password').notEmpty().withMessage('密码为必填项')
]
4、编写接口
思路:
1、先校验字段
2、判断用户信息是否正确
3、向数据库写入session信息
4、移除password字段,不进行返回
5、更新用户在线状态和登录时间
router.post('/login', loginRules, async (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({ code: -1, msg: errors.array() }) } const { username, password } = req.body // 不返回password字段 const data = await userModel.findOne({ username, password: md5(password) }).select('-password') if (data) { req.session.userId = data._id await userModel.updateOne({ _id: data._id }, { online: 1, loginTime: Date.now() }) res.json({ code: 0, msg: '登录成功', data }) } else { res.json({ code: -1, msg: '账号或密码错误' }) } })