0

我正在使用 express 和 mongoose 在我的主页中列出猫

app.get('/', function(req, res) {
    Model.cats.find(function(err, ret) {
        res.render('home.jade', {cats: ret});
    })
});

现在假设我也想展示猫和狗。我怎么能做到?find 函数毕竟是异步的,所以我不确定如何准备响应。

4

1 回答 1

1

如果包含async npm 模块,则非常简单:

app.get('/', function(req, res) {
    async.parallel({
        cats: function(callback) {
            Model.cats.find(function(err, ret) {
                callback(null, ret);
            });
        },
        dogs: function(callback) {
            Model.dogs.find(function(err, ret) {
                callback(null, ret);
            });
        }
    },
    function(err, results) {
        // results will be { cats: results, dogs: results}
        res.render('home.jade', results);
    });  
});

上面的技术启动了两个命名cat的异步请求,一个和另一个dog。每个函数都会调用你Model的 s。完成后,他们调用callback传递任何错误(我刚才放在null上面)和查找结果。以这种方式使用命名调用时非常方便,因为结果将放置在单个对象的两个属性中,您可以将它们直接传递给render方法。

于 2013-09-23T22:19:23.323 回答