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

NodeJS用Sequelize+Postgres创建用户时出现Bcrypt参数缺失错误如何解决

错误原因排查与解决方案

核心报错原因

你遇到的Error: data and salt arguments required报错,本质是调用bcrypt.hash()方法时,第一个待加密的参数为空值。你已经传了第二个salt轮数参数10,所以问题出在密码参数缺失上。

具体可能的触发场景及修复方案:

  • 场景1:请求体参数缺失/解析失败
    你在控制器中直接解构req.body.password,没有提前做非空校验:

    • 若前端请求没有携带password字段,或者字段名拼写错误(比如写为pwd、pass等不匹配的命名),会导致password变量为undefined
    • 若请求头没有设置Content-Type: application/json,express默认不会解析json格式的请求体,会导致整个req.body为空,所有字段均为undefined
      修复方案:在调用bcrypt之前加参数校验
    // 放在解构req.body之后、bcrypt.hash之前
    if (!password || typeof password !== 'string') {
      return res.status(400).json({
        status: 'error',
        message: '密码不能为空且必须为字符串格式'
      })
    }
    
  • 场景2:代码写法不规范导致异常未捕获
    你当前的代码混合了async/await和.then().catch()写法,逻辑层级混乱容易漏捕获异常,建议统一用try/catch包裹异步逻辑:

    const { User } = require('../../models/user');
    const bcrypt = require('bcrypt');
    
    module.exports = async (req, res) => {
      try {
        const {
          full_name,
          email,
          username,
          password,
          age,
          phone_number
        } = req.body;
        // 提前做参数非空校验
        if (!password) {
          return res.status(400).json({status: 'error', message: '密码不能为空'})
        }
        const hash = await bcrypt.hash(password, 10);
        const createResult = await User.create({
          full_name,
          email,
          username,
          password: hash,
          age,
          phone_number
        })
        return res.status(201).json({
          status: 'success',
          message: 'Success register',
          data: createResult
        })
      } catch (error) {
        return res.status(400).json({
          status: 'error',
          message: error.message
        });
      }
    }
    

额外隐藏问题修复

你当前的User模型中profile_image_url字段设置了allowNull: true且配置了默认值,但同时加了notEmpty校验,Sequelize会在触发默认值赋值之前先走校验规则,如果你创建用户时没有传这个字段,notEmpty会判定空值不符合要求抛出异常,建议移除该字段的notEmpty校验,或者把allowNull改成false保持逻辑一致。

内容的提问来源于stack exchange,提问作者M. Hafidurrohman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:03