Node.js:无法返回Mongoose查找结果

我是Node.JS的新手,无法find解决scheme。 我正在构build一个宁静的服务来从mongo中检索数据。

app.js

var database = require('./database.js'); ... app.get('/metadata', function(req, res) { console.log("GET: metadata"); res.send(database.getMetadata(null)); }); app.get('/metadata/:id', function(req, res) { console.log("GET: metadata"); res.send(database.getMetadata(req.params.id)); }); ... 

database.js

 exports.getMetadata = function (id) { console.log('getting metada...') if (id == null) { return FolderInfo.find({}, null, null, function (err, metadatas) { if (!err) { console.log(metadatas); return metadatas; } else { return console.log(err); } }); } else { return FolderInfo.findById(id, function (err, metadatas) { if (!err) { return metadatas; } else { return console.log(err); } }); } } 

我已经尝试了许多不同的方法。 但总是得到这个结果:

 { options: { populate: { } }, _conditions: { }, _updateArg: { }, op: "find" } 

但我的console.log(metadatas); 行将结果打印到控制台。 我正在使用所有最新的软件包。 有人可以帮我吗?

您不能将同步return与asynchronous函数(如findById ,因为它违背了asynchronous操作的基本性质:“ 现在退出,稍后完成 ”。

您必须调整getMetadata以接受稍后完成 findById时可以调用的callback函数:

 exports.getMetadata = function (id, callback) { // ... }; 

而且,只有在没有err时才能返回metadatas

 if (!err) { return metadatas; } else { // ... } 

无论在哪种情况下,都需要调用callback

 callback(err, err ? null : metadatas); 

在上下文中,这可能是:

 FolderInfo.find({}, null, null, function (err, metadatas) { if (err) { console.log(err); } else { console.log(metadatas); } callback(err, err ? null : metadatas); }); 

或者可能只是:

 FolderInfo.find({}, null, null, callback); 

然后传递getMetadata一个callback函数,在调用时处理响应:

 app.get('/metadata', function(req, res) { console.log("GET: metadata"); database.getMetadata(null, function (err, data) { res.send(data); }); });