express.js+mysql实现重置密码功能

思路:
1.定义路由和处理函数
2.验证表单数据
3.根据 id 查询用户是否存在
4.判断提交的 旧密码 是否正确:
5.对新密码进行 bcrypt 加密之后,更新到数据库中:

一、定义路由和处理函数

var express = require("express");
var router = express.Router();
// 引入封装的获取验证码的方法
var userInfo_function = require("../controllers/userInfo");

// 1.导入验证数据的中间件
const expressJoi = require("@escook/express-joi");
// 引入封装的方法
var userInfo_function = require("../controllers/userInfo");
// 1.导入验证数据的中间件
const expressJoi = require("@escook/express-joi");
//  2.导入需要的验证规则对象
const { update_Password_schema } = require("../schema/user");
// 重置密码
router.post(
  "/updatePwd",
  expressJoi(update_Password_schema),
  userInfo_function.updatePassword
);
module.exports = router;
// 重置密码
exports.updatePassword = (req, res) => {
    console.log("req.user.id", req.user.id);
  // console.log("req.body.id", req.body);
  // 根据id查询用户是否存在
  // 定义根据id 查询用户数据的sql语句
  const sql = "select * from ev_users where id=?";
  //执行 SQL 语句查询用户是否存在
  db.query(sql, req.user.id, (err, results) => {
     console.log("请求体", req.body);
     console.log("旧密码", req.body.oldPwd)
    // console.log("数据库中的密码", results[0].password);
    // 执行sql语句失败
    if (err) return res.cc(err);
    // 执行sql语句成功检查results.length为1
    if (results.length !== 1) return res.cc("用户不存在");
    // 判断提交的旧密码是否正确
    // 使用 bcrypt.compareSync(提交的密码,数据库中的密码) 方法验证密码是否正确
    // compareSync() 函数的返回值为布尔值,true 表示密码正确,false 表示密码错误
    const compareResult = bcrypt.compareSync(req.body.oldPwd,results[0].password);
    if (!compareResult) return res.cc("原密码错误");
    // 对新密码进行bcrypt加密之后更新到数据库中
    // 定义更新用户密码的sql语句
    const sqlPwd = "update ev_users set password=? where id=?";
    // 对新密码进行bcrypt加密处理
    const newPwd = bcrypt.hashSync(req.body.newPwd, 10);
    console.log("新密码", newPwd);
    // 执行sql语句,根据id更新用户的密码
    db.query(sqlPwd, [newPwd, req.user.id], (err, results) => {
      // 执行sqL语句失败
      if (err) return res.cc(err);
      // sql语句执行成功,但是影响行数不等于1
      if (results.affectedRows !== 1) return res.cc("更新密码失败!");
      // 更新密码成功
      res.cc("更新密码成功!", 0);
    });
  });
};