我正在努力获得患者的所有咨询,如果患者有多个咨询,那么我需要迭代foreach / map,这是我的实现,但这不起作用,请帮助
在下面的代码中,当我点击api然后我收到的响应是这样的: 未指定默认引擎且未提供扩展名 如果我在没有foreach的情况下运行此代码,那么它正在工作,我正在获得文档长度
router.post('/get/consultations', function(req, res){
console.log("consultation"+req.body.patient_id);
var dc = {};
consultation.find({"patient":req.body.patient_id}).forEach(function(doc){
console.log(doc.length);
//dc.push(doc);
});
res.json(dc);
});
答案 0 :(得分:3)
根据Mongoose Doc http://mongoosejs.com/docs/queries.html
当回调函数:
- 被传递,操作将立即执行,并将结果传递给回调。
- 未传递,将返回Query实例,该实例提供特殊的查询构建器界面。
自你的陈述
consultation.find({"patient":req.body.patient_id})
没有将回调函数作为参数传递。此语句返回一个Query对象,您可以使用.exec执行该对象。
// .find returns a Query object
var query = Person.find({ 'name.last': 'Ghost' });
// execute the query at a later time
query.exec(function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host.
})
所以你的代码应该是以这种方式之一
// using exec
consultation.find({"patient":req.body.patient_id}).exec(function(docs){
docs.forEach(function(doc){
console.log(doc.length);
});
// using callback
consultation.find({"patient":req.body.patient_id}, function(err,docs){
docs.forEach(function(doc){
console.log(doc.length);
});
});
// using promise (mongoose 4+)
consultation.find({"patient":req.body.patient_id}).then( function(docs){
docs.forEach(function(doc){
console.log(doc.length);
});
});