嗨,我的应用程式中有两个要求 但是只有一个发送结果,我该怎么做才能使它们都起作用? 第一个是我所有建筑物的获取,第二个是相同的获取,但是我按校园名称对整个文档进行了排序。
我确实喜欢那样,但是仍然无法正常发送一个请求。
app.get('/buildings', async (req, res) => {
try {
await db.db('').collection('buildings').find({}).toArray(function (err, result) {
res.send(result);
});
await db.db('').collection('buildings').aggregate([
{$group : {_id: "$campusName", buildings : {$push : {buildingName : "$buildingName", phoneNumber :"$phoneNumber" }}}}
]).toArray(function (err, building) {
res.send(building);
});
} catch(err) {
return res.json({
success: false,
message: 'error'
});
}
});
这是我的新查询
app.get('/buildings', async (req, res) => {
try {
await db.db('').collection('buildings').find({}).toArray(async (err, result) => {
await db.db('').collection('buildings').aggregate([
{$group : {_id: "$campusName", buildings : {$push : {buildingName : "$buildingName", phoneNumber :"$phoneNumber" }}}}
]).toArray((err, building) => {
res.send(result);
res.send(building);
});
});
} catch(err) {
return res.json({
success: false,
message: 'error'
});
}
});
最后,我所做的就是将两个查询分成两个这样的地址,对于我来说,最好在前端处理和操作
app.get('/buildings', async (req, res) => {
try{
await db.db('').collection('buildings').find({}).toArray(function (err, result) {
res.send(result);
});
} catch(err) {
return res.json({
success: false,
message: 'error'
});
}
});
app.get('/buildings/percampus', async (req, res) => {
try {
await db.db('').collection('buildings').aggregate([
{$group : {_id: "$campusName", buildings : {$push : {buildingName : "$buildingName", phoneNumber :"$phoneNumber" }}}}
]).toArray(function (err, building) {
res.send(building);
});
} catch(err) {
return res.json({
success: false,
message: 'error'
});
}
});
答案 0 :(得分:0)
您(AFAIK)不能在一条路线上有多个.get
处理程序。您可以将多个中间件链接到一条路由上,但是不能使用多个处理程序,因为只有第一个处理程序将被执行。这意味着您应该在单个请求中获得多个响应,而这不是它的工作方式,实际上会破坏您的Express,因为内部处理得当。如果您希望返回多件事情,请在一个处理程序中运行两个查询:
app.get('/buildings', async (req, res) => {
let res_obj = {}
// Then execute your queries, and place the results inside this res_obj
... queries and their handling ...
res.send(res_obj);
理想情况下,哪个会返回
{
first_query_res: {
...
},
second_query_res: {
...
}
}
答案 1 :(得分:0)
您必须发送包含所需值(建筑物和结果)的单个响应。
首先,我们将从db中搜索并获取result和building的值,然后我们创建一个对象{building:'',result:''}},然后将其打包(JSON.stringify),然后作为响应发送。
app.get('/buildings', async (req, res) => {
try {
await db.db('').collection('buildings').find({}).toArray(function (err, result) { // second db search in this
await db.db('').collection('buildings').aggregate([
{$group : {_id: "$campusName", buildings : {$push : {buildingName : "$buildingName", phoneNumber :"$phoneNumber" }}}}
]).toArray(function (err, building) {
//res.send({building:building,result:result});
// or
res.send(JSON.stringify{building:building,result:result});
});
} catch(err) {
return res.json({
success: false,
message: 'error'
});
}
});