Sequelize中出现user.save is not a function错误,请求排查原因
解决‘user.save is not a function’错误的排查方案
可能的原因及对应解决方法
1. 查询返回普通对象而非模型实例
Sequelize的findOne如果设置了raw: true参数,会返回普通JavaScript对象,而非带有save()方法的模型实例。检查你的查询配置,确保没有开启raw模式:
const user = await db.User.findOne({ where: { id: data.id }, // 移除任何raw: true的配置 })
2. 模型定义或引用错误
确认db.User是正确初始化的Sequelize模型:
- 模型是否通过
sequelize.define正确创建? - 是否在
db对象中正确导出了该模型?
如果模型引用错误,查询返回的可能是无效对象,自然没有save()方法。
3. 优化方案:直接使用update方法替代先查后改
你的代码逻辑可以简化,无需先查询再调用save(),直接使用Sequelize的update方法更高效,还能避免实例相关问题:
let updateUserInfo = async (data) => { try { await db.User.update( { first_name: data.first_name, last_name: data.last_name, email: data.email }, { where: { id: data.id } } ); } catch (e) { throw e; } }
另外,原代码中嵌套new Promise是多余的——async函数本身就会返回Promise,直接使用async/await即可。
内容的提问来源于stack exchange,提问作者Zombani
相关产品推荐
相关产品推荐

