Ошибка [ERR_STREAM_WRITE_AFTER_END]: запись после завершения, http-сервер node.js

#javascript #html #node.js #express

Вопрос:

Настройка нового http — сервера с Node.js

При первом запуске он отображает правильный html-текст на экране, но когда вы переходите по другим ссылкам в моем коде, например: localhost:5001/about, это выдает ошибку в моей консоли IDE

 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.lt;anonymousgt; (/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) =gt; {  if(req.url === '/'){  res.end('Home Page')  }  if(req.url === '/about'){  res.end('About Page')  }  res.end('Error page') })  server.listen(PORT, () =gt; {  console.log(`Server is listening on port: ${PORT}`) })   

Я искал ответ на ошибку «запись после завершения», но не видел этой конкретной проблемы для этого конкретного блока кода

Комментарии:

1. Ваш код может выполняться res.end дважды, когда он делает ошибки.

Ответ №1:

Как упоминалось в комментариях, это связано с res.end тем, что вас вызывали несколько раз, самым простым решением для вас было бы либо return после каждого res.end , либо скорректировать ваши условия:

 const http = require('http');  const PORT = 5001; const server = http.createServer((req, res) =gt; {  if(req.url === '/'){  res.end('Home Page')  }  else if(req.url === '/about'){  res.end('About Page')  }  else {  res.end('Error page')  } })  server.listen(PORT, () =gt; {  console.log(`Server is listening on port: ${PORT}`) })  

Комментарии:

1. Спасибо. Возвращение каждого рез.конца решило мою проблему. Как бы вы иначе изменили это условие?

2. Привет, я опубликовал способ изменить условия на основе else if и else вместо того, чтобы делать это просто if так, чтобы это не касалось других случаев, как только это попадет в конкретный случай