将MongoDB结果返回到HTTP请求

问题描述 投票:0回答:1

我有一个看起来像这样的NodeJS路由:

app.get("/search/:query", (req, res, next) => {

    let obj = SearchText(req.params.query);

    res.status(200);
    res.json(obj);

});

这将调用此函数:

function SearchText(query) {
    query = "Custom"
    let results = "FAILED";
    MongoClient.connect(url,function(err, db) {
        if (err) throw err;
        var dbo = db.db("FunLibsTest");
        dbo.collection("texts").find(query).toArray(function(err, result) {
            if (err) throw err;
            results = result;
            db.close();
        });
    });
    return results;
}

预期结果是MongoDB找到的结果,但始终返回“ FAILED”。

我不相信MongoDB具有“ find”的同步版本,但是我希望它能够同步运行,以便可以将响应返回给HTTP请求。我该怎么办?

javascript node.js mongodb http
1个回答
0
投票

这是由于节点解释器的异步行为。您可以将其转换为async/await函数,如下所示:

async function SearchText(query) {
    query = "Custom"
    let results = "FAILED";
    await MongoClient.connect(url,function(err, db) {
        if (err) throw err;
        var dbo = db.db("FunLibsTest");
        dbo.collection("texts").find(query).toArray(function(err, result) {
            if (err) throw err;
            results = result;
            db.close();
        });
    });
    return results;
}
© www.soinside.com 2019 - 2024. All rights reserved.