Express.js - 如何检查标头是否已发送?

时间:2012-08-19 21:19:36

标签: javascript node.js express response-headers

我正在编写一个可以设置标题的库。如果标头已经发送,我想给出一个自定义错误消息,而不是让它失败,并且Node.js给出了“无法在发送标题后设置标题”消息。那么如何检查标头是否已经发送?

3 个答案:

答案 0 :(得分:136)

Node支持res.headersSent这些天,所以你可以/应该使用它。它是一个只读布尔值,表示标头是否已被发送。

if(res.headersSent) { ... }

请参阅http://nodejs.org/api/http.html#http_response_headerssent

注意:与旧的Connect' headerSent'相比,这是首选方式。 Niko提到的财产。

答案 1 :(得分:42)

编辑:从快递4.x开始,您需要使用res.headersSent。另请注意,您可能希望在检查之前使用setTimeout,因为在调用res.send()之后它不会立即设置为true。 Source

简单: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

答案 2 :(得分:5)

其他答案指向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
});