1

我的模块包含

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 函数从查询中返回结果数组?也许这甚至不是正确的方法。

4

1 回答 1

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

使用 async/await 您可以执行以下操作:

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);
    })
})
于 2018-07-27T16:29:23.103 回答