mongodb - node.js 身份验证与 Sequelize 和 Passport - promise 和回调混淆

标签 mongodb promise callback sequelize.js passport.js

希望有人可以帮助我解决我确定是菜鸟错误的问题。

我正在尝试调整最初基于 mongodb 的身份验证应用程序,改为使用 sequelize\MSSQL,但试图将基于回调的工作示例与
sequelize 的基于 promise 的方法。

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 promise (以及在 .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()) 输出正确的详细信息,显示正确执行的数据库查询返回所需的用户数据,所以我觉得我非常接近找到正确的语法来将其传递回 Passport 回调.

任何帮助将非常感激!

最佳答案

像这样添加raw属性为true,就可以得到用户对象了

User.findOne({ where : {username:username}, raw: true}).then( user => {
  return user
})

关于mongodb - node.js 身份验证与 Sequelize 和 Passport - promise 和回调混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61594219/

相关文章:

javascript - meteor.js & collection2 - 如何查询子模式

python - 如何使用 django 从 mongodb 数据库中检索数据?

javascript - 吞下消息 : Error: Uncaught (in promise): [object Undefined]

ios - 从主视图 Controller iOS 访问已解析的 JSON 数据

javascript - 如何等待回调函数完成?

Node.js 400 错误请求

Mongodb 无法在 Ubuntu 上运行 -> mongod.service : Failed with result 'exit-code'

JavaScript:Promise.All() 和 Async/Await 以及 Map()

promise - 在 Angular 2 中为模拟数据创建 Observable

java - Android 多种接口(interface)实现