【发布时间】:2020-05-06 16:07:16
【问题描述】:
希望有人可以帮助我解决我确信是菜鸟的错误。
我正在尝试调整最初基于 mongodb 的身份验证应用程序,改为使用 sequelize\MSSQL,但试图将基于回调的工作示例与 sequelize 的基于承诺的方法。
MongoDb\Sequelize 都提供 findOne() 方法。
引用 MongoDb 集合的原始(工作)代码:
module.exports.getUserByUsername = function(username,callback){
var query = {username: username};
User.findOne(query,callback);
}
本例中的回调来自一个单独的调用模块,是passport.js本地策略的标准验证密码。
由于 sequelize findOne() 方法需要一个 where 子句,我希望以下是一个开箱即用的解决方案:
module.exports.getUserByUsername = function(username,callback){
var query = {where: {username: username}};
User.findOne(query,callback);
}
这会向 console.log 中输出一个功能查询,但不会触发回调,因此页面会挂起。
查看相应的 API 文档,sequelize findOne() 似乎完全基于 Promise,而 MongoDb findOne() 仅在回调函数未传递给 findOne() 方法的情况下才返回 Promise,否则将流程交给回调时提供了一个,就像工作示例一样。
我尝试了以下改编以使用 sequelize 承诺(以及在 .then() 子句中调用回调函数等的许多排列)。但都失败了,页面挂起::
module.exports.getUserByUsername = function(username,callback){
var query = {where: {username: username}};
return User.findOne(query).then(user => {
console.log(user.get({ plain: true }));
return user.dataValues;
//callback(user.dataValues)
}).finally(() => {
console.log('done!')
});
}
console.log(user.get()) 输出正确的详细信息,显示正确执行的数据库查询返回所需的用户数据,所以我觉得我非常接近找到正确的语法来将其返回给护照回调。
任何帮助将不胜感激!
【问题讨论】:
标签: mongodb promise callback sequelize.js passport.js