개발/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 !' });
});
반응형