Node.js module.exports函数从MongoDB返回数组

时间:2018-07-27 16:12:11

标签: node.js mongodb express

我的模块包含

module.exports.findByUser = function(username, callback){
    var test = db.collection("somecollection");
    test.find({Username: username}, callback);
}

我的路线配置如下:

router.get('/page', ensureAuthenticated, function(req, res, next) {
    var username = req.user.username;
    somemodule.findByUser(username, function(err, resp){
        console.log(resp.toArray());
    });
    res.render('page', {title: 'test page'})
});

Console.log输出Promise。

我的问题是:如何获取findByUser函数以从查询返回结果数组? 也许这甚至不是正确的方法。

1 个答案:

答案 0 :(得分:2)

您需要在光标上使用toArray()方法来返回结果数组,如下所示:

module.exports.findByUser = function(username, callback){
    var test = db.collection("somecollection");
    test.find({Username: username}).toArray(callback);
}

可以称为

router.get('/page', ensureAuthenticated, function(req, res, next) {
    var username = req.user.username;
    somemodule.findByUser(username, function(err, resp){
        console.log(resp);
        res.render('page', {
            title: 'test page',
            data: resp
        });
    });   
});

使用异步/等待,您可以按照以下步骤进行操作:

module.exports.findByUser = function(username){
    const test = db.collection("somecollection");
    return test.find({Username: username}).toArray(); // return promise
}

称为

router.get('/page', ensureAuthenticated, async function(req, res, next) {
    const resp = await somemodule.findByUser(req.user.username);
    console.log(resp);
    res.render('page', {
        title: 'test page',
        data: resp
    });
})

或仅使用诺言

router.get('/page', ensureAuthenticated, function(req, res, next) {
    somemodule.findByUser(req.user.username).then(function(resp) {
        console.log(resp);
        res.render('page', {
            title: 'test page',
            data: resp
        });
    }).catch(function(err) {
        console.error(err);
    })
})