Node.js의 ERR_HTTP_HEADERS_SENT 문제 해결
ERR_HTTP_HEADERS_SENT 오류는 Node.js로 작업하는 개발자에게 흔히 발생하는 함정입니다. 이 오류는 일반적으로 서버가 단일 HTTP 요청에 대해 여러 응답을 보내려고 할 때 발생하며, 이로 인해 예기치 않은 동작과 애플리케이션 충돌이 발생합니다.
ERR_HTTP_HEADERS_SENT 오류의 주요 원인은 res.send(), res.json() 또는 res.redirect()와 같은 응답 메서드를 잘못 사용하는 것입니다. 코드가 실수로 이러한 메서드 중 하나를 두 번 이상 호출하면 서버는 헤더가 이미 전송된 후에 추가 헤더를 전송하려고 시도하여 오류가 발생합니다.
예시 시나리오
이 오류가 어떻게 발생할 수 있는지 보여주는 다음 코드 조각을 고려하세요.
app.get('/app', async function(req, res) { // Avoid doing this! You must ensure only one response is sent. await User.find({ username: req.headers.username }, function(err, items) { res.send('User data retrieved.'); // First response }); res.send('Hello, World!'); // Second response, leading to ERR_HTTP_HEADERS_SENT }); In this example, the res.send('Hello, World!') call executes after res.send('User data retrieved.'), which triggers the error.
res.redirect를 사용한 또 다른 예
아래와 같이 res.redirect 메소드에서도 문제가 발생할 수 있습니다.
app.get('/app', function(req, res) { // Don't do this! Only one response should be sent. await User.find({ username: req.headers.username }, function(err, items) { res.redirect('/app/login'); // First response }); res.send('Welcome!'); // Second response, which will cause the error
});
적절한 해결책
ERR_HTTP_HEADERS_SENT 오류를 방지하려면 코드가 각 요청에 대해 단일 응답만 전송하는지 확인하세요. 이전 예제를 수정하는 방법은 다음과 같습니다.
수정된 예:
app.get('/app', async function(req, res) { const user = await User.find({ username: req.headers.username }); if (user) { res.send('User data retrieved.'); // Send response only once } else { res.redirect('/app/login'); // Or redirect as needed } });
요약하자면, 항상 응답 로직을 확인하여 각 요청이 하나의 응답만 나오는지 확인하세요. 이렇게 하면 ERR_HTTP_HEADERS_SENT 오류를 방지하고 Node.js 애플리케이션의 안정성을 유지할 수 있습니다.
위 내용은 Node.js에서 HTTP 헤더 전송 오류 수정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!