无法将值返回到mongoose / mongodb和nodejs的响应中

我通过Mongoose使用Nodejs,ExpressJs,MongoDB。 我创build了一个简单的UserSchema。 我有我的代码分成多个文件,因为我预见他们变得复杂。

url'/ api / users'被configuration为调用'routes / user.js'中的列表function,这些按预期发生。 UserSchema的列表函数确实被调用,但它没有返回任何东西给调用函数,因此没有结果。

我究竟做错了什么 ?

我试图基于http://pixelhandler.com/blog/2012/02/09/develop-a-restful-api-using-node-js-with-express-and-mongoose/

我想我做了userSchema.statics.list的函数定义的错误

app.js

users_module = require('./custom_modules/users.js'); // I have separated the actual DB code into another file mongoose.connect('mongodb:// ******************'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback() { users_module.init_users(); }); app.get('/api/users', user.list); 

custom_modules / users.js

 function init_users() { userSchema = mongoose.Schema({ usernamename: String, hash: String, }); userSchema.statics.list = function () { this.find(function (err, users) { if (!err) { console.log("Got some data"); // this gets printed return users; // the result remains the same if I replace this with return "hello" } else { return console.log(err); } }); } UserModel = mongoose.model('User', userSchema); } // end of init_users exports.init_users = init_users; 

路线/ user.js的

 exports.list = function (req, res) { UserModel.list(function (users) { // this code never gets executed console.log("Yay "); return res.json(users); }); } 

实际上,在你的代码中,你正在传递一个callback函数,这个callback函数在userSchema.statics.list函数中永远不会被处理

你可以尝试下面的代码:

 userSchema.statics.list = function (calbck) { this.find(function (err, users) { if (!err) { calbck(null, users); // this is firing the call back and first parameter should be always error object (according to guidelines). Here no error, so pass null (we can't skip) } else { return calbck(err, null); //here no result. But error object. (Here second parameter is optional if skipped by default it will be undefined in callback function) } }); } 

因此,你应该改变传递给这个函数的callback。 即

 exports.list = function (req, res){ UserModel.list(function(err, users) { if(err) {return console.log(err);} return res.json(users); }); }