我正在编写一个库,它可以设置头文件。如果已经发送了头文件,我希望提供自定义的错误消息,而不是让它失败并显示Node.js给出的“无法在发送后设置头文件”消息。那么如何检查是否已经发送了头文件?
我正在编写一份库,其中可能会设置头文件。如果已经发送了头文件,我想要提供自定义的错误消息,而不是让其失败并显示 Node.js 给出的“Can't set headers after they are sent”消息。那么,如何检查是否已经发送了头文件?我正在编写一个库,它可以设置头文件。如果已经发送了头文件,我希望提供自定义的错误消息,而不是让它失败并显示Node.js给出的“无法在发送后设置头文件”消息。那么如何检查是否已经发送了头文件?
我正在编写一份库,其中可能会设置头文件。如果已经发送了头文件,我想要提供自定义的错误消息,而不是让其失败并显示 Node.js 给出的“Can't set headers after they are sent”消息。那么,如何检查是否已经发送了头文件?现在Node支持res.headersSent
,因此您可以/应该使用它。 它是一个只读布尔值,指示标头是否已发送。
if(res.headersSent) { ... }
请查看http://nodejs.org/api/http.html#http_response_headerssent。
注意:与Niko提到的旧的Connect 'headerSent'属性相比,这是更优选的方法。
编辑提示:从express 4.x开始,您需要使用res.headersSent属性。请注意,在调用res.send()后立即跟踪该属性并不会立即将其设置为true,因此您可能需要在检查之前使用setTimeout。来源
简单来说:Connect的Response类提供了一个公共属性"headerSent"。
res.headerSent
是一个布尔值,表示头部信息是否已经发送到客户端。
以下是源代码:
/**
* Provide a public "header sent" flag
* until node does.
*
* @return {Boolean}
* @api public
*/
res.__defineGetter__('headerSent', function(){
return this._header;
});
https://github.com/senchalabs/connect/blob/master/lib/patch.js#L22
其他答案指向了Node.js或Github网站。
以下内容来自Expressjs网站:https://expressjs.com/en/api.html#res.headersSent
app.get('/', function (req, res) {
console.log(res.headersSent); // false
res.send('OK');
console.log(res.headersSent); // true
});