2015-09-18 52 views
0

我想为node.js编写自己的模块,但是当我需要它时,它是空的,我定义的方法是未定义的。nodejs需要返回空对象

// module 
var User = require('../models/user'); 

var UMa = function() {}; 

UMa.prototype.getUsers = function() { 
    User.find({}, function(err, users) { 
     return users; 
    }); 
}; 

module.exports = new UMa(); 

第一控制台输出{},第二个是未定义

/* 
* Router for/
*/ 
var express = require('express'); 
var userManagement = require('../modules/user-management'); 
var User = require('../models/user'); 

var router = express.Router(); 

router.get('/users', function(req, res) { 
    console.dir(userManagement); 
    console.log(userManagement.getUsers()); 
    res.render('users', {users: userManagement.getUsers() }); 
}); 
+0

您不能从'getUsers()'函数同步返回一个异步值。这个问题可能每天会被多次询问。我会看看我是否可以找到一个好的dup来标记它。 'getIsers()'有一个异步响应。您只能通过回调返回值。 – jfriend00

+0

@Amit - 'User.find()'看起来完全像数据库调用。而'/ users'的node.js路由将是一个API调用。要么是网络操作,要么是异步。而且,为什么会在界面中通过回调返回结果,如果不是异步? – jfriend00

+0

@Amit - 你的“答案”不提供答案。您不显示任何解决方案。您简要指出可能导致问题的原因,但不提供解决方案。这不是一个好的答案。另外,在11k的代表中,您应该知道这类问题每天会被多次提问,因此没有理由通过回答另一个副本来污染版本库。做一点研究,找到一个好的重复,并将其标记为这样。 – jfriend00

回答

1

我看不出这里有什么问题。

您的功能未显示在您的第一个console.log中,因为它设置在您的userManagement的原型上。

第二个console.log返回undefined,因为你没有返回任何东西在你的函数。

您必须通过回调才能异步获取结果。

​​
+0

为什么你的答案是以“我在这里没有看到任何问题”开头。当代码显然有问题时? – jfriend00

+1

他的代码本身并没有错......他的期望是。 – YoannM

+0

这很愚蠢。他的代码没有做他想做的事情,因此代码是错误的。因此,如果您编写了这些代码并在工作中检查了它,并且您被要求编写错误的代码,那么您会认为代码是正确的?吉兹。代码是错误的,因为它没有完成OP的目标。它不会产生syntaxError,但它不会达到目的。代码是错误的。 – jfriend00