2016-06-30 7 views
0

노드 js 응용 프로그램과 "오류가 발생한 후에 헤더를 설정할 수 없습니다"라는 경로 중 하나가 있습니다.보낸 후 헤더를 설정할 수 없습니다 - NodeJS

는 경로가 무엇을 : 내 응용 프로그램에서

사용자는 특정 액세스 수준을 때문에,이 경로는 사용자 accessLevel 배열을 통해 이동하고이 경로에 대한 적절한 액세스 수준을 찾습니다. 경로를 호출하는 사용자의 액세스 수준에 따라 다른 작업을 수행합니다.

강령 : 어떤 도움이 크게 감사합니다

app.post('/bios/approve', isLoggedIn, function(req, res) { 

for (var i = 0; i < req.user.accessLevel.length; i++) { 
    if (req.user.accessLevel[i] === "Bio Officer") { 

     Bio.findOneAndUpdate({userID: req.body.userID, bioForSector: req.body.bioForSector}, { 
      background: req.body.background, 
      experience: req.body.experience, 
      skills: req.body.skills, 
      bioStatus: req.body.bioStatus 
     }, function(err, editedBio) { 

      if (err) 
       console.log("Error while editing Pending Bio is " + err); 

      else if (editedBio) { 
       User.findOneAndUpdate({accessLevel: "Bio Designer"}, { 
        $push: {biosPending: editedBio._id} 
       }, function(err, user) { 

        if (err) { 
         console.log("The error while finding lineManager is " + err); 
        } else if (user) {User.findOneAndUpdate({accessLevel: "Bio Officer"}, { 
          $pull: { 
           biosPending: editedBio._id 
          } 
         }, function(err, bioOfficer) { 
          if (err) { 
           console.log("The error while finding lineManager is " + err); 
          } 
          res.json("Bio Done!") 
         }); 

        } 
       }); 

      } 

     }); 

    } else if (req.user.accessLevel[i] === "Bio Designer") { 
     // Currently Empty 

    } else { 

     Bio.findOneAndUpdate({userID: req.body.userID,bioForSector: req.body.bioForSector}, { 
      background: req.body.background, 
      experience: req.body.experience, 
      skills: req.body.skills, 
      bioStatus: req.body.bioStatus 
     }, function(err, editedBio) { 

      if (err) 
       console.log("Error while editing Pending Bio is " + err); 

      else if (editedBio) { 
       User.findOneAndUpdate({accessLevel: "Bio Officer"}, {$push: {biosPending: editedBio._id} 
       }, function(err, user) { 

        if (err) { 
         console.log("The error while finding lineManager is " + err); 
        } else if (user) { 

         User.findOneAndUpdate({email: editedBio.lineManagerEmail}, {$pull: {biosPending: editedBio._id} 
         }, function(err, bioOfficer) { 

          if (err) { 
           console.log("The error while finding lineManager is " + err); 
          } 
          res.json("bio Done!") 
         }); 

        } 
       }); 

      } 
     }); 
    } 
} 
}); 

. 아무도 내가 뭘 잘못하고 있는지 알아?

+0

할 수 있습니다 먼저 CB 지옥 밖으로 명확? 그것은 거의 읽을 수 없습니다 ... – CreasolDev

+0

isLoggedIn 함수를 교차 검사하십시오. 거기에 res를 보내지 않습니까? – Nivesh

답변

0

먼저 res.End()를 추가하십시오. res.json() 이후. 그래도 작동하지 않으면 'isLoggedIn'코드를 추가하십시오.

1
Can't Set Headers After they are sent 

은 단일 요청에 대해 여러 번 응답을 보내는 것을 의미합니다.

당신은 내가 제안 할 수있는 코드에서

은 다음과 같습니다

for (var i = 0; i < req.user.accessLevel.length; i++) { 
    if(--req.user.accessLevel.length == 0){ 
     res.json("Bio Done!") 
    } 
} 
+0

답변 해 주셔서 감사합니다. accessLevel 길이는 0이 될 수 없습니다. 모든 사용자에게는 적어도 하나의 accessLevel이 있습니다. 내 코드에는 res.json이 두 번 있지만 if 문에는 여러 부분이 있습니다. – Skywalker

0

당신이 너무 return 단어를 사용합니다 응답을 다시 보낼 때마다. 코드를 실행 한 후 코드가 실행되지 않도록하고 실수로 다른 응답을 다시 보내려는 경우 돌아가고 싶습니다.

예컨대 : return res.json("bio Done!")

관련 문제