Sequelize中models.User.find()报TypeError,findAll正常的问题求助
解决Sequelize中
find()方法抛出TypeError的问题 这问题我之前也踩过坑!根源是Sequelize的版本差异——从v4版本开始,官方直接移除了Model.find()这个方法,改用Model.findOne()来实现单条记录查询,这就是你调用find()时报错“不是函数”,但findAll()能正常工作的原因。
为什么会这样?
在Sequelize v3及更早的版本里,find()是用来获取匹配条件的第一条记录的,但官方在v4重构时废弃了这个方法,统一用findOne()来替代,功能完全对应。
你的代码修改方案
把你passport.deserializeUser里的find()替换成findOne(),同时注意findOne()返回的是单个对象(不是数组),所以要去掉代码里的user[0]:
var models = require('./models'); passport.deserializeUser(function(id, done) { console.log(`deserializeUser ${id}`) //Returns proper value // 替换find()为findOne() models.User.findOne({ where: { id: id } }).then(function(user){ console.log(`users test: ${JSON.stringify(user)}`) // 直接访问user.userId,不需要user[0] console.log("User ID: " + user.userId + " is deserializing"); done(null, user); }).catch(function(err) { // 新版本推荐用catch()替代error()方法 done(err, null); }); });
额外注意点
- 你可以通过运行
npm list sequelize命令确认自己的Sequelize版本,如果是v4+,就必须使用findOne(); - 如果你习惯了旧写法,也可以自己给Model添加一个
find()的封装,但官方不推荐,还是建议使用标准的findOne()来避免后续版本兼容问题。
内容的提问来源于stack exchange,提问作者cphill
相关产品推荐
相关产品推荐

