Node.js 如何在事实发生后编写HTTP 500错误头
假设我有这个:Node.js 如何在事实发生后编写HTTP 500错误头,node.js,http,express,fs,http-status-code-500,Node.js,Http,Express,Fs,Http Status Code 500,假设我有这个: const writeResponse = function(file: string, s: Socket){ s.write([ 'HTTP/1.1 200 OK', 'Content-Type: text/javascript; charset=UTF-8', 'Content-Encoding: UTF-8', 'Accept-Ranges: bytes', 'Connection: keep-alive', ].jo
const writeResponse = function(file: string, s: Socket){
s.write([
'HTTP/1.1 200 OK',
'Content-Type: text/javascript; charset=UTF-8',
'Content-Encoding: UTF-8',
'Accept-Ranges: bytes',
'Connection: keep-alive',
].join('\n') + '\n\n');
getStream(file)
.once('error', function (e: any) {
s.end('error: ' + e && e.stack || e.message || util.inspect(e));
})
.pipe(s)
.once('error', function (e: any) {
s.end('error: ' + e && e.stack || e.message || util.inspect(e));
});
}
我无法解决的问题-如果读取文件时出错,我如何发送此标头而不是成功标头:
HTTP/1.1 500 Cannot read file
问题是,据我所知,将文件写入响应必须在写入标题之后进行,但是如果读取文件时出错怎么办?有两种可能性:
- 要么应用程序保留标题,直到错误无法发生(例如,整个文件已缓冲)。在这种情况下,应用程序将能够发送5xx错误
- 如果应用程序发送一个200报头,向另一端发送错误信号的唯一可能方法是发送一个截断的响应。这只有在
分块
或传输编码:
时才可能实现。使用内容长度:
无法判断HTTP级别是否存在错误connection:close