테스트를 위해 ExpressJS 인스턴스를 프로그래밍 방식으로 종료하려면 어떻게합니까?
Express 인스턴스를 종료하는 방법을 알아 내려고합니다. 기본적으로 .listen(port)
호출 의 반대를 원합니다. Express 서버가 수신을 중지하고 포트를 해제하고 완전히 종료하도록하려면 어떻게해야합니까?
나는 이것이 이상한 쿼리처럼 보일 수 있다는 것을 알고 있으므로 여기에 컨텍스트가 있습니다. 아마도 이것에 접근하는 다른 방법이 있을지도 모르지만 나는 그것에 대해 잘못된 방식으로 생각하고 있습니다. 내 socket.io/nodejs 앱에 대한 테스트 프레임 워크를 설정하려고합니다. 단일 페이지 앱이므로 테스트 스크립트에서 ( Mocha를 사용하고 있습니다.,하지만 그게 중요하지 않습니다.) 서버를 시작하고 이에 대해 테스트를 실행 한 다음 서버를 종료 할 수 있기를 원합니다. 테스트가 시작되기 전에 서버가 켜져 있다고 가정하거나 테스트 중 하나가 서버를 시작하도록하고 모든 후속 테스트가 작동한다고 가정하여이 문제를 해결할 수 있지만, 정말 지저분합니다. 각 테스트 파일이 적절한 설정으로 서버 인스턴스를 시작한 다음 테스트가 끝나면 해당 인스턴스를 종료하는 것을 선호합니다. 즉, 테스트 실행에 이상한 종속성이 없으며 모든 것이 깨끗합니다. 또한 시작 / 종료 테스트를 수행 할 수 있음을 의미합니다.
그래서, 이것을하는 방법에 대한 조언이 있습니까? 수동으로 예외를 트리거하여 예외를 발생시키는 것에 대해 생각했지만 지저분 해 보입니다. Express 문서와 소스를 살펴 봤지만 서버를 종료하는 방법을 찾을 수없는 것 같습니다. 이를 위해 socket.io에 무언가가있을 수도 있지만 소켓 서버가 Express 서버에 연결되어 있기 때문에 Express 계층에서 발생해야한다고 생각합니다.
Express 서버가 더 이상 노드 http 서버에서 상속하지 않기 때문에 상황이 변경되었습니다 . 다행히 app.listen은 서버 인스턴스를 반환합니다.
var server = app.listen(3000);
// listen for an event
var handler = function() {
server.close();
};
사용 app.close()
. 전체 예 :
var app = require('express').createServer();
app.get('/', function(req, res){
res.send('hello world');
});
app.get('/quit', function(req,res) {
res.send('closing..');
app.close();
});
app.listen(3000);
전화 app.close()
테스트가 종료 한 때 콜백 내부. 그러나 프로세스가 여전히 실행 중임을 기억하십시오 (더 이상 듣고 있지 않음).
그 후에 프로세스를 종료해야하는 경우을 호출하십시오 process.exit(0)
.
연결:
app.close : http://nodejs.org/docs/latest/api/http.html#server.close (동일하게 적용됨)
process.exit : http://nodejs.org/docs/latest/api/process.html#process.exit
서버를 시작하고, 테스트를 실행하고, 서버를 중지하는 bash 스크립트를 작성하여 쉽게 수행 할 수 있습니다. 이는 모든 테스트를 빠르고 쉽게 실행할 수 있도록 해당 스크립트에 별칭을 지정할 수 있다는 장점이 있습니다.
전체 연속 배포 프로세스에 이러한 스크립트를 사용합니다. 이에 대한 통찰력을 얻으려면 Jon Rohan의 Dead Simple Git Workflow 를 참조하십시오.
'Programing' 카테고리의 다른 글
Javascript에서 가비지 수집기 활동을 줄이기위한 모범 사례 (0) | 2020.09.05 |
---|---|
PHP에서 언어 구조와 "내장"함수의 차이점은 무엇입니까? (0) | 2020.09.05 |
파이썬이 함수 정의를 인쇄 할 수 있습니까? (0) | 2020.09.04 |
Ruby는 객체 키를 배열로 가져옵니다. (0) | 2020.09.04 |
변수 값이 변경 될 때 이벤트를 트리거하는 방법은 무엇입니까? (0) | 2020.09.04 |