개발/Web

[Node.js] 회원가입을 구현하며 map( )을 사용하다가 난 에러

유훈 | Yuhun 2022. 1. 14. 03:20
반응형

에러명

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

 

회원가입을 구현하다가 마주친 에러인데 찾아보니 response를 여러번 보내려고 할 때 발생한다고 되어있었습니다

보통은 if 문을 사용할 때 그냥 res.~~~ 가 아니라 return res.~를 해주면 해결되는 문제입니다.

 

하지만 다음 예시에서는 에러가 해결되지 않았습니다.

const users = []

app.post('/sign', (req, res) => {
	const { id, name, passWord, email } = req.body;

	users.map((user)=>{
    	if(user.id === id){
        	res.json({msg:'중복된 아이디입니다!')
        }
    })
  
	users.push({ id, name, passWord, email, authority: '0' });
	res.status(200).json({ msg: 'signed !' });
});

그래서 콘솔을 찍어보니 return을 한 후에도 map이 계속 돌고 결국 res.status(200)~~ 이 실행되는걸 발견했습니다.

 

물론 프론트에서는 이상이 없는 것 처럼 보이지만 규모가 커지면 성능에 문제가 될 수 있기에 해결해야 할 문제인건 분명하기에 고민을 했고 결국 for 문을 사용하기로 했습니다.

for문을 사용하니 바로 return이 가능했고 에러 메세지도 사라졌습니다.

 

개선한 코드는 다음과 같습니다.

cosnt users = []

app.post('/sign', (req, res) => {
	const { id, name, passWord, email } = req.body;

	for (let i = 0; i < users.length; i++) {
		if (users[i].id === id) {
			return res.json({ msg: '중복된 아이디입니다!' });
		}
	}
	users.push({ id, name, passWord, email, authority: '0' });
	res.status(200).json({ msg: 'signed !' });
});
반응형