developer tip

Express.js-헤더가 이미 전송되었는지 확인하는 방법은 무엇입니까?

optionbox 2020. 11. 16. 08:08
반응형

Express.js-헤더가 이미 전송되었는지 확인하는 방법은 무엇입니까?


헤더를 설정할 수있는 라이브러리를 작성 중입니다. 헤더가 이미 전송 된 경우 Node.js에서 제공하는 "전송 된 후 헤더를 설정할 수 없습니다"메시지로 실패하도록하는 대신 사용자 지정 오류 메시지를주고 싶습니다. 그렇다면 헤더가 이미 전송되었는지 확인하는 방법은 무엇입니까?


편집 : 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는 res.headersSent요즘을 지원 하므로 사용할 수 / 있어야합니다. 헤더가 이미 전송되었는지 여부를 나타내는 읽기 전용 부울입니다.

if(res.headersSent) { ... }

http://nodejs.org/api/http.html#http_response_headerssent 참조

참고 : 이것은 Niko가 언급 한 이전 Connect 'headerSent'속성과 비교하여 선호하는 방법입니다.


다른 답변은 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
});

참고 URL : https://stackoverflow.com/questions/12030107/express-js-how-to-check-if-headers-have-already-sent

반응형