[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()
답변
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 서버를 종료하는 방법”의 변형에 대해 여러 번 대답했습니다. node.js지원 채널. 안타깝게도 기존 라이브러리 는 한 가지 또는 다른 방식으로 부족 하기 때문에 추천 할 수 없습니다 . 그 이후로 나는 graceful express.js HTTP (S) 서버 종료에 대해 예상되는 모든 경우를 처리하는 패키지를 작성했습니다.
https://github.com/gajus/http-terminator
http-terminator 의 주요 이점 은 다음과 같습니다.
- 원숭이 패치 Node.js API가 아닙니다.
- 첨부 된 HTTP 요청없이 모든 소켓을 즉시 파괴합니다.
- 지속적인 HTTP 요청이있는 소켓에 대한 우아한 타임 아웃을 허용합니다.
- HTTPS 연결을 올바르게 처리합니다.
- 연결을 설정하여 연결 유지를 사용하여 서버가 종료되고 있음을 알립니다. 헤더 닫기
- Node.js 프로세스를 종료하지 않습니다.