将 mongodb 查找的结果分配给变量

Assigning the Result of a mongodb Find to a Variable

我试图将 mongodb 中的查找结果分配给一个变量(下面的 var user = db.collection("Users").findOne),但该变量仍未定义。我知道 find 函数 returns 是一个游标,但根据我的理解,findOne 函数应该是不同的。有人知道如何将查找结果分配给变量吗?

     passport.use(
      new LocalStrategy(
      {
       usernameField: "email",
       passwordField: "userName"
      },

     (email, result, done) => {

       var query = {email: email}
       var user = db.collection("Users").findOne((query) => {
         return true
       })

       if (user) {
         done(null, user)
       } else {
         done(null, false, { message: 'Incorrect username or password'})
       }
     }
   )
 )

它总是 return 未定义 findone 需要一个回调这是如何工作的

var query = {email: email}
       var user = db.collection("Users").findOne(query,(err,user) => {
         if (user) {
         done(null, user)
       } else {
         done(null, false, { message: 'Incorrect username or password'})
       }

您应该从 if/else 块 return 然后调用函数。

我会在查询 db 后使用错误优先回调模式重构为类似这样的东西,或者尝试重构为有助于优雅错误处理的异步函数。我认为原生 mongodb 连接器提供了 Promise 支持。

     const passport = require("passport");
     const LocalStrategy = require("passport-local").Strategy;


    passport.use(
    new LocalStrategy(
        {
        usernameField: "email",
        passwordField: "userName",
        },
        (email, result, done) => {
        db.collection("Users").findOne({ email: email }, (err, user) => {
            if (err) {
            return done(err);
            }
            if (!user) {
            return done(null, false, {
                message: "Incorrect username or password",
            });
            }
            return done(null, user);
        });
        },
    ),
    );