我正在编写一个可以设置标题的库。如果已经发送了标头,我想给出一条自定义错误消息,而不是让它失败并显示 Node.js 给出的“发送后无法设置标头”消息。那么如何检查标头是否已经发送?
问问题
43889 次
3 回答
192
Node 支持res.headersSent
这些天,所以你可以/应该使用它。它是一个只读布尔值,指示标头是否已发送。
if(res.headersSent) { ... }
见http://nodejs.org/api/http.html#http_response_headerssent
注意:与 Niko 提到的较旧的 Connect 'headerSent' 属性相比,这是首选的方法。
于 2014-06-06T08:46:21.310 回答
69
编辑:从 express 4.x 开始,您需要使用 res.headersSent。另请注意,您可能希望在检查之前使用 setTimeout,因为它不会在调用 res.send() 后立即设置为 true。来源
很简单: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
于 2012-08-19T22:20:12.760 回答
10
其他答案指向 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
});
于 2018-08-13T05:24:25.347 回答