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

Express+Sequelize使用bcryptjs哈希MySQL数据报db is not a function错误如何解决

问题原因

你引入的./models导出的db是Sequelize框架规范的对象集合,包含sequelize实例、所有已注册的模型对象,并非Knex之类可直接调用的数据库查询函数,因此你写的db('users')调用方式不符合Sequelize的用法,才会抛出db is not a function错误。

修复方案
  1. 先确认你的./models目录下用户模型的定义名称,标准Sequelize脚手架生成的用户模型会以大驼峰命名挂载到db对象上,比如模型名为User,调用方式为db.User
  2. 替换/register接口中的插入逻辑,将原生SQL风格的insert改为Sequelize提供的create方法,同时注意插入的字段名要和你User模型定义的字段、数据库表字段完全匹配:
    比如你的users表中密码字段名为password,修正后的接口代码如下:
app.post('/register', async (req, res) => {
    try {
        const { email, password } = req.body;
        const hash = await bcrypt.hash(password, 8);
        // 替换原来的db('users').insert逻辑
        await db.User.create({ 
            email: email, 
            password: hash 
        });
        res.status(200).json('good')
    }
    catch (e) {
        console.log(e);
        res.status(500).send('something broke')
    }
})
  1. 额外检查项:
  • 确认./models/index.js中已经正确注册了User模型,并且导出的db对象上存在User属性
  • 确认User模型中定义的字段名、类型和数据库users表完全匹配,避免字段不匹配导致的后续报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:00