Development Tip

Express.js 응답 시간 초과

yourdevel 2020. 12. 30. 19:46
반응형

Express.js 응답 시간 초과


문제

Express.js에 대한 요청 / 응답 시간 초과를 찾고 있었지만 모든 것이 요청 / 응답 자체가 아닌 연결과 관련된 것 같습니다.

요청이 오래 걸리는 경우 시간 초과되어야합니다. 분명히 이것은 일어나서는 안되지만 콜백에 대한 호출이 없거나없는 라우트 핸들러가있는 간단한 실수라도 res.send()브라우저는 응답을 영원히 기다릴 것입니다.

빈 경로 핸들러가 이에 대한 완벽한 예입니다.

app.get('/sessions/', function(req, res, callback){});

고치다

전에 다음 app.use(app,router);을 추가했는데 시간 제한 기능을 추가 한 것 같습니다. 누구든지 이것에 대한 경험 / 의견이 있습니까?

app.use(function(req, res, next){
    res.setTimeout(120000, function(){
        console.log('Request has timed out.');
            res.send(408);
        });

    next();
});

시간 제한을 2 분으로 설정했습니다.


Timeout 지원을위한 Connect Middleware가 이미 있습니다.

var timeout = express.timeout // express v3 and below
var timeout = require('connect-timeout'); //express v4

app.use(timeout(120000));
app.use(haltOnTimedout);

function haltOnTimedout(req, res, next){
  if (!req.timedout) next();
}

위와 같이 타임 아웃 미들웨어를 최상위 미들웨어로 사용하려는 경우 haltOnTimedOut미들웨어는 스택에 정의 된 마지막 미들웨어 여야하며 타임 아웃 이벤트를 포착하는 데 사용됩니다. 업데이트에 대해 @Aichholzer에게 감사드립니다.

참고 :

자체 시간 초과 미들웨어를 롤링하는 경우 4xx 상태 코드는 클라이언트 오류 용이고 5xx는 서버 오류 용입니다. 408은 다음과 같은 경우에 예약됩니다.

클라이언트는 서버가 대기 할 준비가 된 시간 내에 요청을 생성하지 않았습니다. 클라이언트는 나중에 수정없이 요청을 반복 할 수 있습니다.


Express 4.2를 사용하는 경우 시간 초과 미들웨어가 제거되었으므로 수동으로 추가해야합니다.

npm install connect-timeout

코드에서 (코멘트에 따라 편집, 코드에 포함하는 방법)

 var timeout = require('connect-timeout');
 app.use(timeout('100s'));

이 작업을 수행하기 위해 다른 npm 모듈이 필요하지 않습니다.

var server = app.listen();
server.setTimeout(500000);

https://github.com/expressjs/express/issues/3330에서 영감을 얻었습니다.

또는

app.use(function(req, res, next){
res.setTimeout(500000, function(){
        // call back function is called when request timed out.
    });
    next();
});

request.setTimeout(< time in milliseconds >) 일을한다

https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback


경로를 설정하기 전에 코드를 추가하세요.

app.all('*', function(req, res, next) {
    setTimeout(function() {
        next();
    }, 120000); // 120 seconds
});

참조 URL : https://stackoverflow.com/questions/21708208/express-js-response-timeout

반응형