반응형
에러명
[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 !' });
});
반응형
'개발 > Web' 카테고리의 다른 글
[React] 사용자 구분 인증 컴포넌트 만들기 (0) | 2022.01.14 |
---|---|
[React] useState의 비동기성 (state를 남발하지 말자!) (0) | 2022.01.14 |
[JS] axios.get( ) 사용법 (0) | 2022.01.12 |
[Node.js] express에서 json 사용 (0) | 2022.01.12 |
[React] axios를 사용할때 동기, 비동기 주의하기 (0) | 2022.01.12 |