【发布时间】:2017-11-17 12:04:43
【问题描述】:
我在尝试读取文件并将响应发送回浏览器时遇到错误。
[ 'Error: Can\'t set headers after they are sent.',
' at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)',
' at ServerResponse.setWriteHeadHeaders (/somepath/node_modules/on-headers/index.js:82:19)',
' at ServerResponse.writeHead (/somepath/node_modules/on-headers/index.js:41:36)',
' at /somepath/server/custom.js:71:13',
' at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)' ]
var fs = require('fs');
exports.customPageChatStatus = function(req, res) {
if(req.params._pagename === 'Test123')
{
fs.readFile("/somepath/Test123.txt", 'utf-8', function(err, data) {
if (err) console.log(err);
res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' });
res.end(data);
});
}
if(req.params._pagename === 'SecondFile')
{
fs.readFile("/somepath/SecondFile.txt", 'utf-8', function(err, data) {
if (err) console.log(err);
res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' });
res.end(data);
});
}
else {
fs.readFile("/somepath/InActive.txt", 'utf-8', function(err, data) {
res.writeHead(200, {'Content-Type':'text/plain', 'Access-Control-Allow-Origin':'*' });
res.end(data);
});
}
};
有趣的是,我只在读取第一个文件 (Test123.txt) 时看到上述错误,而在读取“SecondFile.txt”时没有问题。
感谢您对解决此问题的任何帮助!
【问题讨论】:
-
当您已经运行 res.end() 并再次调用时会出现此错误
-
我使用条件仅执行一次块,并且仅当它与请求中收到的页面名称匹配时。我不确定它是运行了两次还是多次。
标签: javascript node.js express fs