Javascript 循环数据并推送到不同的数组,以防止发送头错误

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格式将数组发送到客户端站点以防止出现错误。请如果这是可能的,我需要如

嘿,伙计们,我有一个rest api,它可以从我的数据库获取数据到客户端,但是因为我循环每个数据,通过res.json fromat获取并返回结果,它实际上工作正常,但总是出现未处理PromisejectionWarning错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头,这会导致返回的api出现故障。因此,我想知道是否可以创建一个空数组,然后将数据推送到它,而不使用循环函数,并通过res.json格式将数组发送到客户端站点以防止出现错误。请如果这是可能的,我需要如何帮助

我的RESTAPI代码

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
行。