You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+MySQL修改密码功能校验旧密码时服务器无响应卡死问题排查

问题排查与解决方案

核心问题根因

你的service层changePassword方法存在未触发回调的逻辑分支,导致controller层始终等待异步返回,请求持续挂起,最终表现为浏览器加载中、服务假死。
具体缺失的分支场景:当数据库查询到对应用户存在(results.length > 0),但用户提交的当前密码和数据库存储的密码不匹配时,没有调用callback返回结果,整个异步逻辑没有出口。

修复步骤

1. 补全service层缺失的错误回调

修改service文件中的密码判断逻辑,在当前密码校验失败的分支主动调用callback返回错误:

exports.changePassword = (data, callback) => {
  db.query(`SELECT Password FROM user WHERE u_id=? `,
    [data.userid],
    (error, results, feilds) => {
      if (error) {
        return callback(error);
      }
      if (results.length > 0) {
        if (data.currentPassword == results[0].Password) {
          console.log("hello");
          db.query(
            `UPDATE user SET Password=? where u_id=? `,
            [data.newPassword, data.userid],
            (error, results, fields) => {
              if (error) {
                return callback(error);
              }
              if (results.affectedRows > 0) {
                console.log(results.affectedRows);
                console.log(results);
                return callback(null, "updated successfuly");
              } else {
                return callback("Invalid credentials");
              }
            }
          );
        } else {
          // 新增:当前密码错误时触发回调
          return callback("current password incorrect");
        }
      } else {
        return callback("user not exist");
      }
    })
}

2. 可选优化项

  • 不要明文存储密码:建议引入bcrypt库加密存储用户密码,校验时用bcrypt.compare方法比对,避免明文泄露风险。
  • 优化错误提示:把用户不存在、当前密码错误、更新失败的提示做区分,方便前端精准展示错误信息。
  • 增加请求超时逻辑:controller层可添加超时兜底处理,避免极端异常场景下请求长时间挂起。

效果验证

修改后测试三个场景确认问题解决:

  • 当前密码输入错误:正常返回错误提示,无卡死现象
  • 当前密码输入正确:成功更新密码,跳转到/edit-profile页
  • 传入不存在的用户ID:正常返回用户不存在提示

内容的提问来源于stack exchange,提问作者Ankit Ghag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:01