我用这个 before
函数进行了 Node 测试:
before((done) => {
app.startServer()
.catch((err) => {
done(err);
});
});
我现在正在尝试编写一个 after
函数来停止服务器。
我曾希望这可能是:
after(() => {
app.stopServer(apiAddress)
.catch((err) => {
done(err);
})
});
但这不起作用。
这些是我的 express.js
函数:
function startServer() {
return new Promise((resolve, reject) => {
app.listen(PORT, (err) => {
if (err) reject(err);
log.info(`Server listening on port ${PORT}`);
resolve();
});
});
}
function stopServer(url) {
return new Promise((resolve, reject) => {
//const server = app.listen(url);
app.close(url, (err) => {
if (err) reject(err);
log.info(`Server closed on ${url}`);
resolve();
});
});
}
如何在 after 函数中停止我的 express
服务器?
最佳答案
The app.listen() method returns an http.Server object and (for HTTP) is a convenience method for the following:
您正在调用的close
方法是Http.close定义如下的方法:
server.close([callback])
所以你的函数应该是这样的:
function stopServer(url) {
return new Promise((resolve, reject) => {
app.close((err) => {
if (err) reject(err);
log.info(`Server closed on ${url}`);
resolve();
});
});
}
此外,您必须知道 close
函数将挂起,直到所有连接都关闭。
注意:
你可以使用Util.promisify
来简化语法
function startServer() {
return Util.promisify(app.listen)(PORT);
}
function stopServer(url) {
return Util.promisify(app.close)();
}
before((done) => {
app.startServer()
.then(() => done)
.catch(done);
});
after(() => {
app.stopServer()
.then(() => done)
.catch(done);
});
关于javascript - 无法在功能后停止快速服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56271977/