【问题标题】:how get return value (of mongoose query output within model.exports ) to a calling module如何将返回值(model.exports 中的猫鼬查询输出)返回到调用模块
【发布时间】:2014-04-22 19:50:43
【问题描述】:

对于一个项目,我正在使用 mongoose 从 mongoDB 获取用户和密码验证后的主应用程序模块的返回值。我可以使用console.log(在代码中注释)打印输出结果“User.findOne”,但无法将此结果传递给主模块“app.js”。如果在 User.js 模块中执行,我将得到“未定义”作为输出或“结果”的初始化值。

需要帮助了解如何从 User.js 获取返回值(以下代码中的“结果”)到 app.js。

我不是在寻找使用“res.send”作为网络响应返回这个值。我主要是在探索谷歌的问题时发现的。

谢谢。

app.js

var user = require ('./User');
console.log(user.authentication("user","pass"));

用户.js

var User = require('./models/Mongoose');

exports.authentication = function(user, pass){
  var query = {uid: user};
  var result;
  //var result = "None";
  User.findOne(query, function(err,obj) {
    if (err) {
      result = "error: find method";
    } else {
      if (obj != null) {
        if ( pass == obj.password) {
          //console.log("success: authorisation successful");
          result = "authentication successful";
        } else {
          //console.log("error: password incorrect");
          result = "authentication failed";
        }
      } else {
        result = "error: absent user";
      }
    }
  });
  return result;
};

app.js 的输出:

undefined

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    在 User.findOne 有机会给你一些东西之前你返回结果。相反,您应该向身份验证方法添加一个回调函数,例如

    exports.auth = function(user, pass, callback){
      User.findOne(...., function(err, user){
       var result = !!user;
       callback(err, result);
     });
    }
    

    无论如何,您应该习惯于使用异步代码来轻松使用 node。这些教程很可能对你有所帮助:How do I get started with Node.js

    【讨论】:

    • 回调定义在哪里?路由器?
    • @michaelAdam 其实没关系。无论您使用exports.auth,您都可以自己提供回调。它只不过是一个简单的函数,它遵循将可能的错误作为第一个参数并将结果作为其余参数的约定。
    猜你喜欢
    • 2019-09-29
    • 2018-03-07
    • 2020-06-29
    • 2018-05-26
    • 2023-03-21
    • 1970-01-01
    • 2016-09-19
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多