【问题标题】:Store data from MongoDB in variable - mongoose and node.js将来自 MongoDB 的数据存储在变量中 - mongoose 和 node.js
【发布时间】:2011-10-26 13:20:18
【问题描述】:

我想知道是否有人可以告诉我如何从 mongodb 获取字符串值并将其存储在变量中。

db.model("users").findOne({username: username, password: password}, {type:1}, 
    function(err, data) {
        if(err) {
            return "Error";
        } else if() {
            return "No records";
        } else {
            return data.type;
        }
    }
);

当我运行它时,我得到了类型值。

但是如何将其存储在此函数之外的变量中?

【问题讨论】:

    标签: javascript node.js mongodb mongoose database


    【解决方案1】:

    匿名函数的返回值被完全忽略。您可以将变量存储在当前范围内可访问的任何位置。例如

    var Database = function {
      var myText = null;
    
      return {    
    
        getUser: function(username, password, callback) {
          db.model("users").findOne({username: username, password: password}, {type:1},
               function(err, data) {
                 if (err) {
                   myText = "Error";
                 }
                 else if (data.length == 0) {
                   myText = "No records";
                 }
                 else {
                   myText = data.type
                 }
    
                 $('.log').html(myText);
                 callback(myText);
          });
        };
      };
    }();
    

    然后您可以从 server.js 调用:

    Database.getUser(username, password, function(theText) { alert(theText); });
    

    由于带有回调的 Javascript 不会同步运行,因此您需要聪明地了解不同元素的交互方式。也就是说,应该可以实现您正在寻找的任何结果。享受和愉快的编码!

    【讨论】:

    • 问题是我有一个 Server.js 文件,它调用 de Database.js 文件中的 getUserType 函数。问题是我不知道如何从 de database.js 获取值到 server.js。
    • 您应该直接从 Server.js 将回调函数传递给findOne。由于 MongoDB 不是同步的,因此很难按照您建议的方式传递变量。我建议不要在 database.js 中封装 findOne,因为 MongoDB 是基于处理回调的最佳实践(也就是说,您将回调传递到 findOne 的确切位置)。也就是说,您始终可以通过在 database.js 中封装和传递回调来循环回调。这有意义吗?
    • 确实如此:D 我将把 findOne 函数放在服务器中并像这样运行它。我只是想我会将数据库与服务器分开,所以一切看起来都有点有序。
    • 是的,MongoDB 并不特别适合这种封装概念。我已经编辑了我的回复,让您了解这会是什么感觉。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2015-06-29
    • 1970-01-01
    • 2014-01-18
    • 2020-02-18
    • 2020-01-13
    相关资源
    最近更新 更多