将node.js和mongoose返回的GET请求保存到变量中

Save GET request return from node.js and mongoose to variable

本文关键字:保存 请求 变量 GET js node mongoose 返回      更新时间:2023-09-26

我使用node.js和mongoose来执行几个HTTP请求,包括一个get请求。我的get函数将具有相当多的功能,为了简化对许多数据的处理,我试图让局部变量存储mongo的返回。例如:

router.get('/getstuff/:test', function(req, res) {
    var testId = req.params.test;
    var returnStuff = null;
    var collection = req.collection;
    collection.find({userIdd : testId}, function(err, data){
        if (err) console.log(err);
        else {
            console.log(data); // works, data is shown in log
            returnStuff = data; // does not work, data is not saved to returnStuff
        }
    });
    console.log(returnStuff); // undefined
    res.send();
});

我正试图将我从数据库(一个数组)中得到的内容返回到returnStuff变量,但由于关闭,我无法做到这一点。这可能看起来微不足道,但正如我所说,我将有更多的操作,这将真正简化事情。

有人有什么建议吗?真的很感激。

感谢

collection.find是异步执行的,因此res.send在returnStuff填充之前执行。您可以完全去掉它,只在回调中使用res.send(数据)。

这应该有效:

router.get('/getstuff/:test', function(req, res) {
    var testId = req.params.test;
    var returnStuff = null; //optional, remove if you don't need it for anything else
    var collection = req.collection;
    collection.find({userIdd : testId}, function(err, data){
        if (err) console.log(err);
        else {
            console.log(data); // works, data is shown in log
            returnStuff = data;
            collection.somethingelse(function(err,data2){
                returnStuff += data2
                res.send(returnStuff);
            });                
        }
    });
});

如果您有许多这样的操作,您可以将它们制作成一个库,或者使用async之类的库查看此伟大的资源以了解更多信息:http://book.mixu.net/node/ch7.html

阅读这篇文章,你就会知道一切!