Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.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响应?_Node.js_Http - Fatal编程技术网

Node.js 发送标头后是否可以取消HTTP响应?

Node.js 发送标头后是否可以取消HTTP响应?,node.js,http,Node.js,Http,在一个节点HTTP服务器上,我正在生成一个进程并将输出流式传输到响应 当进程返回时,我希望向客户端指示是否发生了错误。显然,我无法设置HTTP状态代码,因为标头已经发送 有没有办法中止连接 例如 在expressjs上,这不会终止节点进程(可能只需要绑定到错误事件),但会立即终止响应,向用户指示一个没有超时的错误。我在中发现了这一点,您可以使用 req.client.destroy() 或res.connection.destroy() 然后,curl将报告 curl:(18)传输结束,剩余

在一个节点HTTP服务器上,我正在生成一个进程并将输出流式传输到响应

当进程返回时,我希望向客户端指示是否发生了错误。显然,我无法设置HTTP状态代码,因为标头已经发送

有没有办法中止连接

例如

expressjs
上,这不会终止节点进程(可能只需要绑定到错误事件),但会立即终止响应,向用户指示一个没有超时的错误。

我在中发现了这一点,您可以使用

  • req.client.destroy()
  • res.connection.destroy()
然后,curl将报告

curl:(18)传输结束,剩余未完成的读取数据


调用
res.end()
之前抛出错误时会发生什么情况?您的意思是
res.emit(“错误”,…)
?客户端仍然得到成功响应。不,实际上只是抛出一个错误,因此永远不会到达
res.end()
。这可能会中止响应,表明客户端失败。这是一个有趣的想法,但我不希望我的节点进程退出。不调用res.end()将保持连接打开,直到客户端超时。我宁愿立即中止连接。express与
http
几乎相同,请注意函数签名与您的示例(
req,res
参数)完全相同。
var http = require('http');
http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World\n');

  // how do I abort the request at this point 
  // and indicate an error to the client?
  // e.g. curl should return != 0

  res.end();
}).listen(1337, '127.0.0.1');
var thirdPartyApp = $express();

thirdPartyApp.use('/error/', function (req, res) {

    console.log('error');

    res.writeHead(200);
    res.write('aye');

    throw 'booboo!';

    res.end();
});