Javascript 循环数据并推送到不同的数组,以防止发送头错误
嘿,伙计们,我有一个rest api,它可以从我的数据库获取数据到客户端,但是因为我循环每个数据,通过res.json fromat获取并返回结果,它实际上工作正常,但总是出现未处理PromisejectionWarning错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头,这会导致返回的api出现故障。因此,我想知道是否可以创建一个空数组,然后将数据推送到它,而不使用循环函数,并通过res.json格式将数组发送到客户端站点以防止出现错误。请如果这是可能的,我需要如何帮助 我的RESTAPI代码Javascript 循环数据并推送到不同的数组,以防止发送头错误,javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,嘿,伙计们,我有一个rest api,它可以从我的数据库获取数据到客户端,但是因为我循环每个数据,通过res.json fromat获取并返回结果,它实际上工作正常,但总是出现未处理PromisejectionWarning错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头,这会导致返回的api出现故障。因此,我想知道是否可以创建一个空数组,然后将数据推送到它,而不使用循环函数,并通过res.json格式将数组发送到客户端站点以防止出现错误。请如果这是可能的,我需要如
Router.post('/getFeeds/forMe',authoriazation,async(req,res)=>{
const getFeeds = []
try {
//req.body.following is an array of users which we will loop through and get data of each of them!
if (req.body.following.length > 0) {
req.body.following.forEach(async (element,i) => {
const GetFeed = await Feed.find({$or:[{feedType:'palsfeed',feedby: element.follow_to },{feedby: req.user}]}).sort({ date: -1 }).sort({ date: -1 })
if (GetFeed) {
if (GetFeed.length > 0) {
//returns array to the client side
res.json({feeds:GetFeed})
}
}
});
}else{
const GetFeed = await Feed.find({feedby: req.user }).sort({ date: -1 })
if (GetFeed) {
if (GetFeed.length > 0) {
//returns array to the client side
// console.log({feeds:GetFeed})
}
}
}
} catch (error) {
console.log(error.message)
}
})
问题是这里的
循环。您正在循环并发送响应。这样,您的API将发送多个响应
这个问题可以通过修改查询而不是在循环中发送响应来解决
因此,我们将在
中使用$来解决此问题:
您修改的代码:
在这里,我将元素。follow\u to
放入数组follow\u to\u arr
。然后使用$in
查询,比如feedby:{$in:follow_to_arr}
if (req.body.following.length > 0) {
const follow_to_arr = [];
req.body.following.forEach(async (element,i) => {
follow_to_arr.push(element.follow_to);
});
const GetFeed = await Feed.find({$or:[{feedType:'palsfeed',feedby: { $in: follow_to_arr }},{feedby: req.user}]}).sort({ date: -1 }).sort({ date: -1 })
if (GetFeed) {
if (GetFeed.length > 0) {
//returns array to the client side
res.json({feeds:GetFeed})
}
}
}
这意味着您很可能正在“authorization”中间件中向客户端发送响应(代码中有错误信息)。是的,授权中间件持有登录用户的id,但它是否具有res.send
或res.json
或res.render
或任何发送响应的内容?如果(GetFeed.length>0){//returns array to the client side res.json({feed:GetFeed})}//这将使用res.json向客户端返回一个数据数组。请记住,中间件是按顺序运行的;您不能发送两次响应。请从authorization
中删除res.json
行。