【问题标题】:Returning/getting object from a module in nodejs mongodb从nodejs mongodb中的模块返回/获取对象
【发布时间】:2013-01-23 02:03:13
【问题描述】:

我正在开发一个 nodejs 应用程序。
文件夹结构是

app
app.js
package.json
../model/schema.js
../controller/controller.js
../views


所有逻辑都在 controller.js 中,而 app.js 自己执行路由....
我想知道如何从 controller.js 获取/返回数据(对象)到 app.js。
我正在使用“返回”将 mongodb 文档从控制器发送到应用程序,但它未定义。

这里的 app.js 代码..我已经删除了不必要的代码

  var express = require('express'),
   app = express.createServer(express.logger()),
   io = require('socket.io').listen(app),
   routes = require('./routes');
   var controller=require('./controller/controller');
   var model=require('./model/schema');

   app.get("/", function(req, res) {
     res.render("chatroom.html");
    });

   io.sockets.on('connection', function (socket) {
      socket.on('login',function(user)
      {
          var onliner=controller.loginUser(user);
          console.log("Onlinersss: ",onliner);
      });

      socket.on('registerUser',function(user){
          controller.registerUser(user);
      });
   });



这是 controller.js 代码:

  var model=require('../model/schema');
  exports.loginUser=function(user)
  {

      model.registerUser.findOne({uname:user.uname,pass:user.pass},function(err,doc){
        if(!err){ 
             console.log("Here loggedin: ",doc); 
             return doc;             
        }
        else
             console.log("Invalid username or password");
        });
  };

【问题讨论】:

标签: node.js model-view-controller mongodb module express


【解决方案1】:

我刚刚将一个项目推送到 GitHub,它使用几乎相同的库和 RethinkDB 作为数据库(非常类似于 MongoDB)。基本上,您需要将callbacks 传递给您的控制器,并使用从数据库中检索到的数据调用它们。查看链接项目中的 app.js 和 lib/db.js。

【讨论】:

  • 是的回调用于场景...谢谢。
【解决方案2】:

JavaScript(因此 node.js)是异步的。当您“返回文档”时,将返回在 function(err, doc) 定义的匿名函数...而不是您尝试从中获取数据的函数 loginUser。

loginUser 立即返回,并返回 undefined(因为您没有指定其他任何内容)。要明白我的意思,请输入'return true;'作为 loginUser 的最后一行,你会注意到你得到的值是 'true'。

但是,您不想返回值。你想用一个值回调。这超出了 stackoverflow 答案的范围,所以这里有一个很好的资源:

http://bjouhier.wordpress.com/2011/01/09/asynchronous-javascript-the-tale-of-harry/

【讨论】:

  • 是的 .. 我得到了它返回的函数 (err,doc) 但我没有得到这个 harry 的教程。
  • 请提出任何其他方式..?
  • 我刚刚在这里得到了答案:stackoverflow.com/questions/10928471/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2020-08-14
相关资源
最近更新 更多