Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在事实发生后编写HTTP 500错误头_Node.js_Http_Express_Fs_Http Status Code 500 - Fatal编程技术网

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报头,向另一端发送错误信号的唯一可能方法是发送一个截断的响应。这只有在
    分块
    传输编码:
    内容长度:
    时才可能实现。使用
    connection:close
    无法判断HTTP级别是否存在错误

亨利将军前来救援