我正在学习Express的Node.js。所以我已经连接了mongodb并使用nodejs从数据库中获取数据。当我点击邮递员的网址时,我可以检索数据,但问题是无法将响应返回给邮递员。我可以在控制台中看到结果。如果我尝试了 setTimeout ,它就可以正常工作..但这不是正确的方法。我尝试使用res.send()方法返回响应,但没有用。请帮助我解决
app.post('/getmongo',function (req,res){
console.log("I received a request");
console.log(req.body.filters)
filters = req.body.filters
console.log(typeof filters)
var ism = []
db.collection('collection_name').find(filters,function(err,data){
if(err){
console.log(err)
return res.send(500,'something went wrong')
}
else{
data.each(function(err,doc){
console.log(doc)
ism.push(doc)
});
setTimeout(function(){res.send({"ISM":ism})},1000)
}
});
});
答案 0 :(得分:1)
您可以在数组中返回查找结果,而不是在数据中进行迭代并将结果插入到数组中。
因此,您的函数将如下所示:
app.post('/getmongo', function(req, res) {
filters = req.body.filters;
db.collection('collection_name').find(filters).toArray(function(err, docs) {
if (err) {
console.log(err);
return res.send(500, 'something went wrong');
} else {
res.send({"ISM": docs});
// If you want to return JSON
// res.json({"ISM": docs});
}
});
});
答案 1 :(得分:0)
由于其异步特性,它正在发送空数据。
您可以使用这种黑客手段。
data.each(function(err,doc){
console.log(doc)
ism.push(doc)
if(data.length === ism.length) {
res.send({"ISM":ism})
}
});
答案 2 :(得分:0)
您的insertMany
参数不是“ Your data”:D,它是data
对象,而Cursor
函数是异步函数。如果没有each
,setTimeout
(不像Array.prototype.forEach)和data.each
将同时运行(res.send({"ISM":ism})
现在是[])。
如果您想继续使用ism
,则必须更改一些代码:
cusor method
或者,您可以使用data.each(function(err,doc){
if(doc !== null) {
console.log(doc)
ism.push(doc)
} else {
// close you db connection...
res.send({"ISM":ism})
}
});
方法(如果使用的是.toArray
)来找回require('mongodb').MongoClient
:
data
https://mongodb.github.io/node-mongodb-native/api-generated/cursor.html