我正在编写一些测试,并希望能够以编程方式启动/停止我的 HTTP 服务器。一旦我停止 HTTP 服务器,我希望启动它的进程退出。
我的服务器是这样的:
// file: `lib/my_server.js`
var LISTEN_PORT = 3000
function MyServer() {
http.Server.call(this, this.handle)
}
util.inherits(MyServer, http.Server)
MyServer.prototype.handle = function(req, res) {
// code
}
MyServer.prototype.start = function() {
this.listen(LISTEN_PORT, function() {
console.log('Listening for HTTP requests on port %d.', LISTEN_PORT)
})
}
MyServer.prototype.stop = function() {
this.close(function() {
console.log('Stopped listening.')
})
}
测试代码如下:
// file: `test.js`
var MyServer = require('./lib/my_server')
var my_server = new MyServer();
my_server.on('listening', function() {
my_server.stop()
})
my_server.start()
现在,当我运行时node test.js
,我得到了stdout
我期望的输出,
$ node test.js
Listening for HTTP requests on port 3000.
Stopped listening.
但我不知道如何让产生的进程node test.js
退出并返回外壳。
现在,我(抽象地)理解,只要有针对它正在侦听的事件的绑定事件处理程序,Node 就会继续运行。为了node test.js
退出到 shell my_server.stop()
,我需要取消绑定某些事件吗?如果是这样,哪个事件和来自什么对象?我尝试MyServer.prototype.stop()
通过从中删除所有事件侦听器进行修改,但没有运气。