node.js - Res.send() 返回空数组
问题描述
我正在尝试进行 API 调用,但customizeObj
最后是空的。
userRouter.get("/getusers", (req, apiRes) => {
let users;
var customizeObj = [];
User.find()
.then((res) => {
users = res;
})
.then(() => {
users.forEach(async (user) => {
let event = null;
event = await Event.findById(user.eventID);
let year = event.date.getFullYear();
let month =
event.date.getMonth() + 1 < 10
? "0" + event.date.getMonth() + 1
: event.date.getMonth() + 1;
let day =
event.date.getDate() < 10
? "0" + event.date.getDate()
: event.date.getDate();
customizeObj.push({
firstName: user.firstName,
lastName: user.lastName,
phoneNumber: user.phoneNumber,
zipCode: user.zipCode,
type: event.type,
location: event.location,
date: new Date(`${year}-${month}-${day}`),
});
console.log(customizeObj); // Not empty
});
console.log(customizeObj); // Empty
})
.then(() => {
console.log(customizeObj); // Empty
apiRes.send(customizeObj) // Sends emprty array
})
.catch((err) => console.log(err));
});
可以请任何人帮助我吗?我不知道为什么它是空的
解决方案
基于 express 和 mongoose - 这应该按照上面提供的细节工作。
userRouter.get("/getusers", (req, res) => {
try{
let customizeObj = [];
//get users and lean
const users = await User.find().lean();
if(!users.length){
//should return empty if users don't exist.
return res.send(customizeObj);
}
//loop over users.
for(let i = 0 ; i < users.length ; i++){
//get event of user by users[i].eventID.
let event = await Event.findById(users[i].eventID).lean();
//if event exists you create the customized object, if doesn't exist again no element will be pushed to customizeObj array.
if(event){
let year = event.date.getFullYear();
let month =
event.date.getMonth() + 1 < 10
? "0" + event.date.getMonth() + 1
: event.date.getMonth() + 1;
let day =
event.date.getDate() < 10
? "0" + event.date.getDate()
: event.date.getDate();
customizeObj.push({
firstName: users[i].firstName,
lastName: users[i].lastName,
phoneNumber: users[i].phoneNumber,
zipCode: users[i].zipCode,
type: event.type,
location: event.location,
date: new Date(`${year}-${month}-${day}`),
});
}
}
res.send(customizeObj);
} catch(error){
console.log('error in api',error);
res.status(500).send({message: 'unknown error', error});
}
});
此外,您应该创建一个事件模型的引用,并使用 populate('event') 在单个查询中获取事件,而不是在循环中查询。
推荐阅读
- typescript - 如何确定字符串是否是枚举的一部分?
- r - na.fail.default(list(Fe = c(568L, 437L, 599L, 1016L, 670L, 1951L, : 对象中的缺失值
- .net - Traefik 不会路由路径
- javascript - 从网络服务器摄像头录制
- next.js - 使用 index.js 以外的东西作为 next.js 目录中的主页
- android - 环绕图标的按钮?
- python - 如何修复 Pygame 无法打开文件“Gunshot.ogg”错误
- python - 使用opencv调整视频大小并保存
- kubernetes - kubernetes v1.18.8 安装问题
- javascript - EC2 网站中的 WebSocket 连接超时