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