2017-06-23
Node.js 의 모듈중 웹서버를 만들어주는 express라는 모듈을 사용하다 보면, 아래와 같은 에러를 접할 때가 많다.
Error: Can't set headers after they are sent.

해당 에러는 여러 이유에서 발생 하는 것으로 알려졌는데, 필자가 최근에 발생한 해당 오류는
forEach()문 안에 res.status().send(); 함수를 넣고 돌려서였다.
results.forEach(function(val){
	if( val !== false )
	{
		res.status(200).send(val);
		return false;
	}
});
아직 필자는 순수 javascript에 능숙하지 못한 상태여서, 위와 같은 구문으로 forEach를 탈출 할 수 있을줄 알았기 때문이다.
(jquery의 $.each문은 return false로 빠져나올수 있다.)

하지만 저런식으로는 탈출하지 못하고 results에 들어가있는 오브젝트 개수만큼 forEach문이 돌게 된다. 그 결과 res.status().send()함수가 여러번 호출 됐고, 위와 같은 오류가 뜨게 된 것이다.

참고로 forEach에서 탈출하는 방법에는 throw를 사용 하거나, 아래처럼 some으로 바꾸고 true를 리턴해주면 된다.
results.some(function(val){
	if( val !== false )
	{
		res.status(200).send(val);
		return true;
	}
});