如何使用nodejs返回邮递员的回复

时间:2018-10-10 03:59:51

标签: node.js reactjs express

我正在学习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)
         }
    });

 });

3 个答案:

答案 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});
        }
    });
});

http://mongodb.github.io/node-mongodb-native/3.1/quick-start/quick-start/#find-documents-with-a-query-filter

答案 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函数是异步函数。如果没有eachsetTimeout(不像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