直截了当:我的后端有多条路由。
是否可以从一条路由返回多个查询,例如:
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()
,则将第一个查询的结果用作第二个的查询参数。以上只是我的思考过程。它无法像这样工作,并且我错过了实现它的功能(如果可能的话)
答案 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);
})