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

未传入bcrypt参数时无法打印变量的代码调试方法

针对未传入bcrypt参数导致无报错分支异常的调试方法
  • 检查依赖模块的可用性
    在使用bcrypt的代码段前,直接打印模块状态:

    console.log('bcrypt模块状态:', bcrypt);
    

    如果输出undefined,说明bcrypt未被正确传入或导入。也可以在函数开头添加校验逻辑,提前抛出明确错误:

    if (!bcrypt || typeof bcrypt.compareSync !== 'function') {
      console.error('bcrypt模块未正确传入');
      return res.status(500).json('内部服务错误');
    }
    
  • 添加语句级执行日志
    在bcrypt.compareSync前后添加日志,确认语句是否执行及变量状态:

    console.log('准备执行密码校验,密码:', password, '存储的哈希值:', data[0]?.hash);
    const isValid = bcrypt.compareSync(password, data[0].hash);
    console.log('密码校验完成,结果:', isValid);
    

    如果前一条日志输出,后一条未输出,说明这条语句执行时抛出了同步错误。

  • 细化错误捕获范围
    给then回调内的同步代码单独添加try-catch,避免同步错误被外层Promise的catch捕获后混淆报错信息:

    .then(data => {
      console.log(data);
      try {
        const isValid = bcrypt.compareSync(password, data[0].hash);
        console.log('isValid:', isValid);
        if(isValid) {
          db.select("*")
            .from("users")
            .where("email", "=", email)
            .then(user => {
              res.json(user[0])
          }).catch(err => res.status(400).json("Unable to get User"));
        } else {
          res.status(400).json("Wrong credentials !");
        }
      } catch (err) {
        console.error('密码校验逻辑出错:', err);
        res.status(500).json('验证逻辑异常');
      }
    }).catch(err => {
      console.error('数据库查询出错:', err);
      res.status(400).json("Wrong Credentials");
    });
    

    这样如果bcrypt不存在,会打印TypeError: Cannot read properties of undefined (reading 'compareSync')这类明确错误,直接定位问题。

  • 使用调试器断点调试

    • Node.js环境:用node --inspect启动服务,通过Chrome的chrome://inspect连接调试器,在const isValid = ...行添加断点,运行到此处时查看bcrypt变量的状态,确认是否存在。
    • 浏览器环境:直接在开发者工具的Sources面板找到对应代码行,添加断点,hover查看变量值。
      断点调试能直观看到代码执行流程和变量状态,快速定位语句未执行的原因。
  • 前置参数校验
    在函数入口处对所有依赖参数做校验,确保业务逻辑执行前依赖都正常:

    function loginHandler(req, res, bcrypt) {
      // 校验bcrypt参数
      if (!bcrypt || typeof bcrypt.compareSync !== 'function') {
        console.error('缺少有效的bcrypt依赖');
        return res.status(500).json('内部服务错误');
      }
      // 后续数据库查询及校验逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:11