2012-11-08 4 views
1

내 모듈 용 테스트 스크립트를 작성 중이며 요청이 완료되면 서버를 닫을 수 있어야합니다. 다음 코드는 작동하지만 app.close()가 express 3에서 삭제되었음을 알 수 있습니다. 지금은 가장 좋은 방법은 무엇입니까?요청이 완료되면 nodejs가 서버를 닫습니다.

var testCase = require('nodeunit').testCase; 
var request = require('request'); 
var express = require('express'); 

var app = express.createServer(); 
var srv = app.listen(); 
.... 

request({ 
    method: 'POST', 
    json: true, 
    body: { id: 'second request'}, 
    url: 'http://' + target 
    }, function(err, res, body) { 

    console.info("closing server"); 
    app.close(); 
    test.done(); 
    }); 
}); 

감사합니다, 리

추신 test.done()은 서버를 닫은 후에 호출해야합니다. 그렇지 않으면 테스트가 실패합니다.

답변

2

http.Server에서 상속하는 데 사용되는 빠른 응용 프로그램과 더 이상 사용하지 않는 응용 프로그램은 close의 출처입니다. 대신 srv 인스턴스에서 close()으로 전화하십시오.

Bind and listen for connections on the given host and port, this method is identical to node's http.Server#listen() .

+0

내가 명시 2.5이 실행하도록 시도하고 나에게 다음과 같은 오류 제공 : app.listen()에 대한 the documentation에 따르면

var app = express.createServer(); var srv = require('http').createServer(app); srv.listen(port); 

: 당신은 일반적으로이 코드는 다음과 같이 기록을 참조 할 수있다 ('의 addListener 새로운 오류가 발생을 함수의 인스턴스 만 취함 '); 내 생각에 "응용 프로그램"은 Express 2.5의 Function 인스턴스가 아닙니다 ... 코드를 조작하여 어떻게 작동 할 수 있는지 생각해보십시오. (익스프레스 2.5 이상 버전에서 코드를 실행하고 싶습니다.) – user429400

+0

두 개의 다른 인터페이스가 있으므로 두 가지 버전의 코드를 작성해야합니다. 당신이'typeof app'을 점검하여 그것이 기능인지 아닌지를 확인할 수 있다고 가정합니다. –

+0

그래서 함수라면 새로운 코드를 사용해야하고 그렇지 않다면 app.close()를 사용하여 이전 코드를 사용해야합니까? – user429400

관련 문제