ExpressJS mongodb多个查询
我想用两个集合来获取数据。 如何在一个响应中发送这些数据?
这是我的代码:
//RETURN SINGLE QUERYE exports.findById = function(req, res) { //Get Params var querye_id =new BSON.ObjectID(req.params.id); var querye; //Get Single Querye db.collection('queryes', function(err, collection) { collection.findOne({'_id':querye_id}, function(err, item) { querye=item; }); }); //Get Questions and Answers db.collection('questions', function(err, collection) { collection.find().toArray(function(err, items) { querye.questions=items; }); }); //Send Response res.send(querye); };
我有变数querye未定义。 如何解决这个问题?
var async = require('async'); function getQueries(id, callback) { db.collection('queryes', function(err, collection) { collection.findOne({'_id':id}, callback); }); } function getQuestions(callback) { db.collection('questions', function(err, collection) { collection.find().toArray(callback); }); } exports.findById = function(req, res) { var querye_id =new BSON.ObjectID(req.params.id); async.parallel({ querye: async.apply(getQueries, query_id), questions: getQuestions }, function (error, results) { if (error) { res.status(500).send(error); return; } results.querye.questions = results.questions; res.send(results.querye); }); };
你应该做的是使用deferreds / promise以瀑布方式得到结果,然后在完成所有事情时返回结果。
我喜欢使用节点的asynchronous库。
https://npmjs.org/package/async
这可以让你排队所有的asynchronousfunction,然后报告成功/失败。 最后你会得到结果。
假设你已经需要asynchronous模块,你的代码看起来像这样。
exports.findById = function(req, res) { //Get Params var querye_id =new BSON.ObjectID(req.params.id); async.waterfall([ function(callback){ //Get Single Querye db.collection('queryes', function(err, collection) { collection.findOne({'_id':querye_id}, function(err, item) { callback(null, item); }); }); }, function(arg, callback){ //Get Questions and Answers db.collection('questions', function(err, collection) { collection.find().toArray(function(err, items) { arg.questions=items; callback(null, arg); }); }); }],function(err, results){ //Send Response res.send(results); }); };
- Node.JS – 简单的Socket.IO示例不起作用。 获取debugging服务的静态内容/socket.io.js(Mac OSX / Localhost)
- mongoose:geoNear并且填充。 在使用executeDbCommand时可以填充字段吗?
- 尝试从桌面读取节点js文件时出错
- Express + MongoDB – req.query的对象
- 我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?
- jQuery和Express – 成功和错误混合起来
- ExpressJS:res.redirect()不能按预期工作?
- 与Express私人路线反应
- Express路由器与Backbone pushstate冲突
- 即使提供了文件,也可以在mongoose中获取validation错误
- 使用多个值Express.js MongoDB部分更新嵌套对象