Resolving HTTP Headers Sent Error in Node.js
In this short post, I will show you how to resolve ERR_HTTP_HEADERS_SENT, a very common error in Node.js.
Join the DZone community and get the full member experience.
Join For FreeWhen using express and Node.js, we will sometimes get this error:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:277:15)
at ServerResponse.setHeader (node:_http_outgoing:563:11)
at ServerResponse.header (/node_modules/express/lib/response.js:771:10)
at file:///link/to/file/app.js:309:13 {
code: 'ERR_HTTP_HEADERS_SENT'
This is quite a confusing error if you aren't familiar with HTTP headers. This error arises when you send more than 1 response to the user or client. That means the receiver is getting two responses when it should only be getting one.
To solve this, make sure you are only sending one response.
How To Solve
This can often be caused when you send a response to the client, and an asynchronous piece of code then sends a second response after the first. Look in your code, you may be accidentally using res.send
twice. For example, the below will cause the error:
app.get('/app', async function(req, res) {
/* Don't do this! Remove one of the res.send functions to remove the error */
await User.find({username: req.headers.username}, function(err, items) {
res.send('User');
})
res.send('Hello');
})
Note: other res functions, such as res.redirect
will cause the same issue, i.e. the below code is also wrong:
app.get('/app', function(req, res) {
/* Don't do this! Remove one of these functions to remove the error */
await User.find({username: req.headers.username}, function(err, items) {
res.redirect('/app/login');
})
res.send('Hello');
})
Your code should instead look like this, with only one res
function:
app.get('/app', function(req, res) {
res.redirect('/app/login');
})
That's all! I hope this post helps you resolve this common HTTP error.
Published at DZone with permission of Johnny Simpson, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments