NodeJS 개발자로서 다음과 같은 런타임 오류가 발생할 가능성이 있습니다.
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
오류 [ERR_HTTP_HEADERS_SENT]는 서버가 클라이언트에 둘 이상의 응답
을 보내려고 할 때 발생하는 흥미로운 오류입니다. 이것이 의미하는 바는 주어진 클라이언트 요청
에 대해 서버
가 이전에 응답
(요청 된 리소스가있는 성공 응답 또는 잘못된 요청에 대한 오류 응답)을 클라이언트로 보냈고 이제 예기치 않게 다른 응답을 보내려고한다는 것입니다.
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.post('/test', (req, res) => {
if (!req.body.name) {
res.status(400).json({
status: 'error',
error: 'req body cannot be empty',
});
}
res.status(200).json({
status: 'succes',
data: req.body,
})
});
app.listen(4000, () => {
console.log('Server live');
});
위의 코드에서 if문 조건이 통과되면 res.status(400).json
이 발생한 후 그 후에 res.status(200).json
으로 인해 다른 응답을 보내려고 시도하고 여기에서 오류가 발생합니다.
이미 응답을 한번 보냈는데 두 번째 응답을 보내려 시도하기 때문에 서버가 충돌하므로 오류 메시지가 표시됩니다.
if 조건부
에서 전송되는 응답에 javascript return 문
을 추가하여 응답이 클라이언트에 전송되면 코드를 종료시키는 것입니다.
if (!req.body.name) {
return res.status(400).json({
status: 'error',
error: 'req body cannot be empty',
});
}
덕분에 잘 해결했습니다!