gpt4 book ai didi

javascript - 无法在功能后停止快速服务器

转载 作者:行者123 更新时间:2023-11-28 20:26:09 26 4
gpt4 key购买 nike

我用这个 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 服务器?

最佳答案

根据 this堆栈溢出问题并查看 express文档。

app.listen

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 函数将挂起,直到所有连接都关闭。

看看this SO question



注意:

你可以使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com