[javascript] 노드 익스프레스 서버를 올바르게 닫는 방법은 무엇입니까?

/auth/github/callback
URL 에서 콜백을받은 후 서버를 닫아야합니다 . 일반적인 HTTP API 폐쇄 서버는 현재 server.close([callback])
API 기능을 지원 하지만 노드 익스프레스 서버에서는 TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'
오류 가 발생합니다. 그리고 저는이 문제를 해결하기위한 정보를 찾는 방법을 모릅니다.
Express Server를 닫으려면 어떻게해야합니까?

NodeJS 구성 참고 :

$ node --version
v0.8.17
$ npm --version
1.2.0
$ npm view express version
3.0.6

실제 애플리케이션 코드 :

var app = express();

// configure Express
app.configure(function() {
    // … configuration
});

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            app.close();
            // TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'
        }, 3000)
    }
);

app.listen('http://localhost:5000/');

또한 ‘nodejs express close…’를 찾았 지만 내가 가지고있는 코드와 함께 사용할 수 있는지 확실하지 않습니다 var app = express();..



답변

app.listen()를 반환합니다 http.Server. close()인스턴스가 아닌 해당 인스턴스에서 호출해야 app합니다.

전의.

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            server.close();
            // ^^^^^^^^^^^
        }, 3000)
    }
);

var server = app.listen('http://localhost:5000/');

소스를 검사 할 수 있습니다. /node_modules/express/lib/application.js


답변

Express v3에서는이 기능을 제거했습니다.

app.listen()함수 의 결과를 할당하고 그에 적용 하여 동일한 결과를 얻을 수 있습니다 .

var server = app.listen(3000);
server.close()

https://github.com/visionmedia/express/issues/1366


답변

Express 앱에서 오류가 발생하면 서버를 닫아야하며 다음과 같이 할 수 있습니다.

var app = express();
var server = app.listen(process.env.PORT || 5000)

오류가 발생하면 응용 프로그램은 SIGTERM

여기에서 노드 신호에 대해 자세히 읽을 수 있습니다.

https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html

process.on('SIGTERM', () => {
  console.info('SIGTERM signal received.');
  console.log('Closing http server.');
  server.close(() => {
    console.log('Http server closed.');
  });
});


답변

“HTTP 서버를 종료하는 방법”의 변형에 대해 여러 번 대답했습니다. 지원 채널. 안타깝게도 기존 라이브러리 는 한 가지 또는 다른 방식으로 부족 하기 때문에 추천 할 수 없습니다 . 그 이후로 나는 graceful express.js HTTP (S) 서버 종료에 대해 예상되는 모든 경우를 처리하는 패키지를 작성했습니다.

https://github.com/gajus/http-terminator

http-terminator 의 주요 이점 은 다음과 같습니다.

  • 원숭이 패치 Node.js API가 아닙니다.
  • 첨부 된 HTTP 요청없이 모든 소켓을 즉시 파괴합니다.
  • 지속적인 HTTP 요청이있는 소켓에 대한 우아한 타임 아웃을 허용합니다.
  • HTTPS 연결을 올바르게 처리합니다.
  • 연결을 설정하여 연결 유지를 사용하여 서버가 종료되고 있음을 알립니다. 헤더 닫기
  • Node.js 프로세스를 종료하지 않습니다.


답변