有很多与此相关的问题,但我找不到任何有用的回复,因为它适用于一个非常特殊的情况。
我在一个模块中包装express,并启动和关闭连接,如下所示:
var server = express(),
runningInstance = {};
server._listen = server.listen;
server.listen = server.init;
// Start it up!
server.init = function(callback) {
configure();
runningInstance = server._listen(config.PORT, config.HOST, function() {
logger.OK('Express server listening at %s:%d', config.HOST, config.PORT);
if(callback && typeof callback == 'function') { return callback(); }
});
};
server.close = function(callback) {
if(!runningInstance.close) {
if(callback && typeof callback == 'function') { return callback('Tried to close a server that\'s not up'); }
else { return; }
}
// Once the server closes, log it and rock the callback
if(callback && typeof callback == 'function') runningInstance.once('close', function() {
logger.OK('Express server closed at %s:%d', config.HOST, config.PORT);
callback();
});
// Stops the server from accepting new connections
runningInstance.close(function(err) {
if(err) {
logger.error('Tried to close a server that\'s not up on %s:%s', config.HOST, config.PORT);
if(callback && typeof callback == 'function') { return callback(err); }
else { return; }
}
});
};
现在,我的测试:
it('Creating the server should not fail', function(done) {
server.init(function(err) {
expect(err).to.not.exist;
done();
});
});
it('Should close the server', function(done) {
server.once('close', function() {
request(server)
.get('/')
.expect(404, done);
done();
});
我希望服务器在关闭后给我一个404,但它实际上是以200响应。
我真的不知道为什么会这样,正在执行on('close')回调,并且服务器在请求之前不会再次启动...