Express.js - 如何检查是否头部已发送?(Express.js - How to che

2019-06-27 04:44发布

我写这可能设置头的库。 我想给一个自定义错误消息,如果头已发送,而不是仅仅让它失败,“无法设置头后,他们被送到”消息由Node.js的给定 因此,如何检查,如果头已发送?

Answer 1:

编辑:作为快递4.x版的,你需要使用res.headersSent。 还需要注意的是,你可能要检查前使用setTimeout的,因为它没有被设置为真,立即打电话给之后res.send()。 资源

很简单:Connect的响应类提供的公共属性“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



Answer 2:

节点支持res.headersSent这些天,所以你可以/应该使用。 这是指示头已经发送一个只读的布尔值。

if(res.headersSent) { ... }

见http://nodejs.org/api/http.html#http_response_headerssent

注:这是做它的首选方式,相比尼科提到旧连接“headerSent”属性。



Answer 3:

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


文章来源: Express.js - How to check if headers have already sent?