问题描述
伙计们正在尝试遍历一个数组,以从另一个信息表中使用节点js和mongodb获取特定用户的所有用户数据,因此该数组的每个元素都可以从另一个表返回数据。到目前为止,如果我运行我的代码和console.log,它将返回所有用户数据,但是如果我使用res.json,它将仅返回1个数据,请问如何使用res.json返回所有数据?我可以将所有对象移入只是1个数组,如果是的话,我该怎么解决
我的代码
//get students that offer the course and send link to them
router.get('/send/Link/:id',GetAllUserdata,async(req,res)=>{
const {dept,college,level} = req.body
const responseArray = [];
for (let index = 0; index < res.GetUserDT.coursesHandled.length; index++) {
responseArray.push( res.GetUserDT.coursesHandled[index].courseCode);
}
responseArray.map(async(course,i)=>{
const getActiveClass = await Class.findOne({'school.college':college,'school.department':dept,'school.level':level,'school.course':course,'type':'uploadclass',"expires":0})
if(getActiveClass){
console.log({url:getActiveClass.address,course:getActiveClass.school.course})
}else{
res.status(404).json('nothing')
}
})
})
我的控制台答案
{ url: 'eyaF8Pq6SP8e7YMe48aY',course: 'csc2101' }
{ url: 'c6d8KGfo6WO67QRC0Dq8',course: 'csc2104' }
我的res.json答案
{ url: 'eyaF8Pq6SP8e7YMe48aY',course: 'csc2101' }
解决方法
我建议您将结果保存到数组中,并在最后返回数组。尝试使用try catch块来捕获异步调用错误。
const {dept,college,level} = req.body
const responseArray = [];
let result=[];
for (let index = 0; index < res.GetUserDT.coursesHandled.length; index++) {
responseArray.push( res.GetUserDT.coursesHandled[index].courseCode);
}
try{
responseArray.map(async(course,i)=>{
const getActiveClass = await Class.findOne({'school.college':college,'school.department':dept,'school.level':level,'school.course':course,'type':'uploadclass',"expires":0})
if(getActiveClass){
result.push({url:getActiveClass.address,course:getActiveClass.school.course})
}
})
return res.json(result);
}
catch(error){
res.status(404).json('nothing')
}