[英]Asynchronous request from database in node.js
我正在向數據庫發出異步請求,然后對結果數據運行循環,但在向前端發送響應時我只得到最后一個值
routes.post('/data/qualitative/bivariate', async (req, res)=>{
const { colName1, colName2} = req.body;
var colNameObj1={};
var colNameArray1={};
colNameObj1[colName1]=1;
colNameObj1[colName2]=1;
colNameObj1['_id']=0;
//requesting data from database
const data= await dataModel.find({}, colNameObj1);
//filtering the data
const newData= data.map( (item)=>{
colNameArray1['x']= item[colName1];
colNameArray1['y']= item[colName2];
return colNameArray1
})
//in response i am getting just the data from the last index
res.json(newData)
})
作為回應,我只從最后一個索引中獲取數據。 請告知我如何處理這個異步請求
如果您想要所有行,那么您應該將您可以創建的每個對象推送到一個數組中。 在上面的代碼中,您覆蓋了同一個對象。
嘗試將代碼更新為以下內容:
routes.post('/data/qualitative/bivariate', async (req, res)=>{
const { colName1, colName2} = req.body;
var colNameObj1={};
var colNameArray1={};
const dataList = [] // Create a empty array
colNameObj1[colName1]=1;
colNameObj1[colName2]=1;
colNameObj1['_id']=0;
//requesting data from database
const data= await dataModel.find({}, colNameObj1);
//filtering the data
data.forEach( (item)=>{
colNameArray1['x']= item[colName1];
colNameArray1['y']= item[colName2];
dataList.push(colNameArray1) // Push to the array
})
//in response i am getting just the data from the last index
res.json(dataList)
})
您必須在 map 函數中聲明colNameArray1
:
routes.post('/data/qualitative/bivariate', async (req, res)=>{
const { colName1, colName2} = req.body;
var colNameObj1={};
colNameObj1[colName1]=1;
colNameObj1[colName2]=1;
colNameObj1['_id']=0;
//requesting data from database
const data= await dataModel.find({}, colNameObj1);
//filtering the data
const newData= data.map( (item)=>{
var colNameArray1={};
colNameArray1['x']= item[colName1];
colNameArray1['y']= item[colName2];
return colNameArray1
})
//in response i am getting just the data from the last index
res.json(newData)
})
我發現了這個問題,它與異步請求無關,如上所述,它確認我正在覆蓋對象。 使用 spread {... obj} 克隆對象已經解決了這個問題。 感謝幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.