xiaoliziaaa

node中间件

npm i body-parser

post 请求主题中间件

const bodyParser = require(\'body-parser\')

 
const bodyParser = require(\'body-parser\')

// 创建 application/json 解析
 const jsonParser = bodyParser.json()
 app.use(jsonParser)

 

express-validator 表单校验中间件

const { body } = require(\'express-validator\');
const UserModel = require(\'../model/User\')
const bcrypt = require(\'bcrypt\')

/**
 * 用户注册数据校验
 * 
 */
exports.addUserValidate = [
  // name 不为空 string
  body(\'name\').notEmpty().isString().withMessage(\'name字段不能为空且必须是string类型\'), //withMessage配置可有可无
  // password 不为空 string
  body(\'password\').notEmpty().isString().withMessage(\'password字段不能为空格且必须是string类型\'),
  // 年龄数字 不为空 0<=age<=100
  body(\'age\').notEmpty().isInt(), //isInt number类型验证失效 
  // userId字段数据数据库唯一 不为空 且为string 
  body(\'userId\').notEmpty().isString().custom(value => {
    return UserModel.findOne({ userId: value }).then(user => {
      if (user) {
        return Promise.reject(\'userId 已存在\');
      }
    });
  })

]

/**
 * 用户登录数据校验
 * 
 */
let currentUser = null //用于保存当前
exports.userLoginValidate = [

  body(\'userId\').notEmpty().isString().custom(value => {
    return UserModel.findOne({ userId: value }).select(\'+password\').then(user => {
      // 判断用户是否存在
      if (!user) {
        return Promise.reject(\'该用户id尚未注册\');
      }
      currentUser = user


    });
  }),

  body(\'password\').notEmpty().isString().custom(async value => {

    const match = await bcrypt.compare(value, currentUser.password); // 明文 ,加密密码
    if (!match) return Promise.reject(\'秘密输入有误,请再输入一次\');

  }),


]
View Code

 

bcrypt密码加密解密中间件

body.password = await bcrypt.hash(body.password, 10) // 密码加密
const match = await bcrypt.compare(value, currentUser.password); // 明文 ,加密密码
 
 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-07-02
  • 2022-03-08
  • 2021-11-24
  • 2022-02-06
  • 2021-11-27
  • 2022-01-14
  • 2022-12-23
猜你喜欢
  • 2021-11-27
  • 2021-07-07
  • 2021-11-27
  • 2021-12-03
  • 2021-11-27
  • 2021-11-27
相关资源
相似解决方案