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

Node.js POST请求400错误:登录提示‘Wrong credentialsss’排查

问题定位及修复方案

核心错误原因

日志中的Cannot read properties of undefined (reading 'hash')是问题关键:你在代码中尝试读取某个对象的hash属性,但该对象本身是undefined。结合业务逻辑,大概率是以下两种场景导致:

  • 场景1:查询结果处理错误:使用mysql2、sequelize等数据库库查询login表时,返回结果通常是匹配记录的数组,而非单个对象。如果你直接通过result.hash读取属性,等同于试图读取数组的hash属性(数组本身无此属性),触发undefined.hash的错误。
  • 场景2:未处理空查询结果:当用户输入的用户名不存在时,login表的查询结果为空(空数组或undefined),但你的代码未先判断结果是否存在就直接读取hash属性,导致报错。而错误捕获逻辑将这个异常直接归为“凭证错误”,返回了Wrong credentialsss。

验证与修复步骤

  1. 确认查询结果结构:在查询login表后添加日志,打印结果的具体结构:
    const loginQueryResult = await db.query('SELECT * FROM login WHERE username = ?', [req.body.username]);
    console.log('Login query output:', loginQueryResult);
    
  2. 正确提取单条记录并做判空处理:
    const loginQueryResult = await db.query('SELECT * FROM login WHERE username = ?', [req.body.username]);
    const loginRecord = loginQueryResult[0]; // 提取第一条匹配记录
    // 先判断用户是否存在
    if (!loginRecord) {
      return res.status(400).send('Wrong credentials');
    }
    // 再执行bcrypt密码校验
    const passwordMatch = await bcrypt.compare(req.body.password, loginRecord.hash);
    
  3. 区分异常类型,避免错误混淆:用try/catch包裹整个登录逻辑,将数据库查询异常、密码错误、用户不存在的情况分开处理:
    try {
      const loginQueryResult = await db.query('SELECT * FROM login WHERE username = ?', [req.body.username]);
      const loginRecord = loginQueryResult[0];
      if (!loginRecord) {
        return res.status(400).send('Wrong credentials');
      }
      const passwordMatch = await bcrypt.compare(req.body.password, loginRecord.hash);
      if (passwordMatch) {
        const userInfo = await db.query('SELECT * FROM users WHERE login_id = ?', [loginRecord.id]);
        return res.status(200).send(userInfo[0]);
      }
      res.status(400).send('Wrong credentialsss');
    } catch (err) {
      console.error('Login process error:', err);
      res.status(500).send('Internal server error');
    }
    

简化代码能成功的原因

当你直接返回login表查询结果时,并没有执行读取hash属性的操作,因此不会触发undefined相关的报错,自然不会进入返回Wrong credentialsss的错误分支,所以能正常返回数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:45:36