我正在开发一个nodejs应用程序。
文件夹结构
app
app.js
package.json
../model/schema.js
../controller/controller.js
../views
所有逻辑都在controller.js中,而app.js执行路由本身....
我想知道如何从controller.js到app.js获取/返回数据(对象)。
我正在使用'return'将mongodb文件从控制器发送到应用程序,但未定义。
了app.js..i的继承代码删除了不必要的代码
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);
});
});
Heres 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");
});
};
答案 0 :(得分:0)
JavaScript(因此node.js)是异步的。当您'返回doc'时,将返回function(err, doc)
中定义的匿名函数...而不是您尝试从中获取数据的函数loginUser。
loginUser立即返回,并返回undefined(因为您没有指定任何其他内容)。看看我的意思,把'return true;'作为loginUser中的最后一行,你会注意到你得到了'true'的值。
但是,您不想返回值。您想要使用值回调。这超出了stackoverflow答案的范围,所以这是一个很好的资源:
http://bjouhier.wordpress.com/2011/01/09/asynchronous-javascript-the-tale-of-harry/
答案 1 :(得分:0)