javascript - 错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入
问题描述
代码说明:当用户访问特定的 url 时,我返回特定的 HTML 文件:
const http = require('http');
const fs = require('fs');
fs.readFile('./funkcionalnosti-streznika.html', function(err1, html1) {
fs.readFile('./posebnosti.html', function(err2, html2) {
if (err1 || err2) {
throw new Error();
}
http.createServer(function(req, res) {
if (req.url == '/funkcionalnosti-streznika') {
res.write(html1);
res.end();
}
if (req.url == '/posebnosti') {
res.write(html2)
res.end();
} else {
res.write('random');
res.end();
}
}).listen(8080)
})
});
在终端上,当我访问 localhost:8080/funkcionalnosti-streznika 时出现此错误:
events.js:288
throw er; // Unhandled 'error' event
^
Error [ERR_STREAM_WRITE_AFTER_END]: write after end
at write_ (_http_outgoing.js:637:17)
at ServerResponse.write (_http_outgoing.js:629:15)
at Server.<anonymous> (/*filelocation*/:19:21)
at Server.emit (events.js:311:20)
at parserOnIncoming (_http_server.js:784:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:119:17)
Emitted 'error' event on ServerResponse instance at:
at writeAfterEndNT (_http_outgoing.js:692:7)
at processTicksAndRejections (internal/process/task_queues.js:85:21) {
code: 'ERR_STREAM_WRITE_AFTER_END'
我认为当我过早关闭响应时会出现问题。我应该如何将其更改为异步?
解决方案
你已经意识到问题所在了。让我们看一下这段代码:
http.createServer(function(req, res) {
if (req.url == '/funkcionalnosti-streznika') {
res.write(html1);
res.end();
}
if (req.url == '/posebnosti') {
res.write(html2)
res.end();
} else {
res.write('random');
res.end();
}
}).listen(8080)
假设那req.url
是 ' /funkcionalnosti-streznika'
。怎么了?它进入第一个 if、writeshtml1
和 ends res
。然后检查它'/posebnosti'
,但它是不同的,因为第一个if
是真的。这意味着else
分支将被执行,因此res.write('random');
被调用,但res
在第一个时已经关闭if
。建议:
http.createServer(function(req, res) {
if (req.url == '/funkcionalnosti-streznika') {
res.write(html1);
res.end();
}
else if (req.url == '/posebnosti') {
res.write(html2)
res.end();
} else {
res.write('random');
res.end();
}
}).listen(8080)
推荐阅读
- c - linux内核开发人员使用类吗?
- javascript - 需要帮助来创建 server.js 以解决 CORS 问题
- bash - sed 使部分模式匹配
- android - Realm 5.15.0 和最新版本 (6.0.2),gradle 同步失败
- xcode - 无法从苹果配置器 2 和 xcode 安装 .ipa
- python - 从 csv 文件中提取特定文本
- vba - Access 中禁用或“只读”文本框的条件格式
- excel - 代码范围内的计算和搜索
- scala - 如何概括 'Seq[String] => Seq[Int]' 和 'Iterator[String] => Iterator[Int]' 的实现以进行文件处理?
- c# - 发生内部异常:无法序列化类型“<>f__AnonymousType2`6[...]”