【问题标题】:Assigning the Result of a mongodb Find to a Variable将 mongodb 查找的结果分配给变量
【发布时间】:2020-09-29 07:51:24
【问题描述】:

我正在尝试将 mongodb 中的查找结果分配给一个变量(var user = db.collection("Users").findOne 下面),但该变量仍未定义。我知道 find 函数返回一个游标,但据我了解, 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'})
       }
     }
   )
 )

【问题讨论】:

    标签: javascript node.js mongodb express passport.js


    【解决方案1】:

    它总是会返回未定义的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'})
           }
    

    【讨论】:

    • 我明白了。非常感谢 Sven.hig!我已经为此苦苦挣扎了好几个小时。
    【解决方案2】:

    您应该从 if/else 块返回,然后调用该函数。

    我会在查询 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);
            });
            },
        ),
        );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多