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

标签 javascript node.js express testing

我用这个 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/

相关文章:

javascript - 服务器触发客户端事件两次

javascript - 未捕获的语法错误 : Unexpected token (First program)

javascript - pdo 调用来填充变量以供稍后使用

javascript - 在 javascript 中创建和扩展对象会覆盖基础对象的变量

javascript - 确定用户嵌入文档数组中是否存在值

javascript - 等待正常功能

node.js - express.js 请求事件是否记录在任何地方?

node.js - 异步功能不起作用

node.js - 在 mongodb select 中使用偏移量和限制

javascript - 如何在切换前更改按钮的初始宽度?