从后端返回多个查询

时间:2018-08-28 00:11:54

标签: node.js mongodb express mongoose redux

直截了当:我的后端有多条路由。

是否可以从一条路由返回多个查询,例如:

router.get("/test/:id", (req, res) => {
  example.find({test: req.params.id})
    .then(data => res.json(data.map(moreData => moreData.serialize()))

  differentExample.find({something: req.params.id})
    .then(data => res.json(data.map(moreData => moreData.serialize()))
})

然后在前端都有两个查找/结果:

.then(res => {
    if (!res.ok) {
        return Promise.reject(res.statusText);
    }
    return res.json();
})
.then(data => console.log(data))

我发现,如果我使用Promise.all(),则将第一个查询的结果用作第二个的查询参数。以上只是我的思考过程。它无法像这样工作,并且我错过了实现它的功能(如果可能的话)

1 个答案:

答案 0 :(得分:0)

您不能使用HTTP发送多个响应。 HTTP对响应的请求为1:1,因此,发送请求时,您总是希望只有一个响应。其他任何事情都会很快变得混乱。那么,如何发送多组数据呢?

您可以执行以下操作:

router.get("/test/:id", (req, res) => {
  let result = {}
  example.find({test: req.params.id})
    .then(data => {
        result['partOne'] = data.map(moreData => moreData.serialize())
        return differentExample.find({something: req.params.id})
    }).then(data => {
        result['partTwo'] = data.map(moreData => moreData.serialize())
        res.json(result)
    })
}

注意:我尚未测试任何此代码。但本质上,同时执行两个请求,一旦获得两个请求的结果,就可以返回结果。如果请求互不依赖,则可以使用Promise.all来使用类似的内容:

Promise.all(
    example.find({test: req.params.id}, 
    differentExample.find({something: req.params.id})
).then(result => {
    res.json(result);
})