如何在一个app.get请求中返回多个Mongodb集合?

4
我需要从两个不同的mongodb集合中加载两组数据到一个页面上。
通过mongoose发出请求的路由页面如下所示:
app.get('/testPage', function(req,res){
    dbReadOne.find({}, '', function(error, dataOne){
        res.json(dataOne);
    });
    dbReadTwo.find({},'', function(error, dataTwo){
        res.json(dataTwo);
    });
});

我的Angular工厂看起来像这样

app.factory('dataOneFactory', function($resource){
    return $resource('testPage/:dataOne', {}, {
        query: { method: 'GET', params:  {symbol: 'dataOne'}, isArray: true}
    })
});
app.factory('dataTwoFactory', function($resource){
    return $resource('testPage/:dataTwo', {}, {
        query: { method: 'GET', params:  {customList: 'dataTwo'}, isArray: true}
    })
});

我完全不知道怎么做这件事。希望能得到关于这个问题的任何建议。谢谢。

1个回答

1
由于Node.js是异步的,因此dbReadOne.find函数也是异步运行的,所以你应该在第一个dbReadOne.find函数的回调中调用下一个dbReadOne.find函数。
示例:
app.get('/testPage', function(req, res){
     dbReadOne.find({}, '', function(errorOne, dataOne){
         if(errorOne)
            throw new Error(errorOne);
         dbReadTwo.find({},'', function(errorTwo, dataTwo){
            if(errorTwo)
                throw new Error(errorTwo);
            res.json({
                dataOne: dataOne,
                dataTwo: dataTwo
            });
         });
     });
});

这些不相互依赖。应该使用 Promise.all 代替。 - Dan Green-Leipciger
如果出现错误,请求应该失败。你的示例没有错误处理。对于客户端开发人员来说,知道是否有服务器错误非常重要。请注意,返回0行不是错误。 - Dan Green-Leipciger
此外,通过将第二个查找放在回调中,您必须等待第一个完成,这会使请求的时间加倍,而不是同时运行它们。 - Dan Green-Leipciger
唯一需要在回调函数中包含某些内容的原因是它依赖于先前异步调用接收到的数据。 - Dan Green-Leipciger
我一直在尝试让我的工厂提取信息并将其加载到$scope变量中,但是我没有什么运气。你有什么建议,我的工厂应该是什么样子? - user3731342
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接