#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
так, чтобы это не касалось других случаев, как только это попадет в конкретный случай