Setting up a new http server with Node.js
When you first launch it, it displays the proper html text on the screen but when you move to other links in my code ie: localhost:5001/about, it gives me an error in my IDE console
events.js:377
throw er; // Unhandled 'error' event
^
Error [ERR_STREAM_WRITE_AFTER_END]: write after end
at new NodeError (internal/errors.js:322:7)
at writeAfterEnd (_http_outgoing.js:694:15)
at ServerResponse.end (_http_outgoing.js:815:7)
at Server.<anonymous> (/Users/angelo/Documents/coding/node/node-tutorial/app.js:11:7)
at Server.emit (events.js:400:28)
at parserOnIncoming (_http_server.js:900:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:127:17)
Emitted 'error' event on ServerResponse instance at:
at writeAfterEndNT (_http_outgoing.js:753:7)
at processTicksAndRejections (internal/process/task_queues.js:83:21) {
code: 'ERR_STREAM_WRITE_AFTER_END'
}
[nodemon] app crashed - waiting for file changes before starting...
app.js
const http = require('http');
const PORT = 5001;
const server = http.createServer((req, res) => {
if(req.url === '/'){
res.end('Home Page')
}
if(req.url === '/about'){
res.end('About Page')
}
res.end('Error page')
})
server.listen(PORT, () => {
console.log(`Server is listening on port: ${PORT}`)
})
I've been looking for answer for the 'write after end' error but have not seen this specific issue for this specific block of code
CodePudding user response:
As mentioned on the comments, this is due to res.end
being called multiple times, the simplest solution for you would either to return
after each res.end
or adjust your conditions:
const http = require('http');
const PORT = 5001;
const server = http.createServer((req, res) => {
if(req.url === '/'){
res.end('Home Page')
}
else if(req.url === '/about'){
res.end('About Page')
}
else {
res.end('Error page')
}
})
server.listen(PORT, () => {
console.log(`Server is listening on port: ${PORT}`)
})