javascript - Node.js 启动时运行方法

标签 javascript node.js express

node.js 新手。

我正在使用 mocha 为 Node.js 应用程序设置集成测试,遵循本指南:http://taylor.fausak.me/2013/02/17/testing-a-node-js-http-server-with-mocha/

创建服务器如下:

var http = require('http');

this.server = http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello, world!\n');
});

exports.listen = function () {
  this.server.listen.apply(this.server, arguments);
};

exports.close = function (callback) {
  this.server.close(callback);
};

监听和关闭函数是这样的:

  • require('server') 是幂等的
  • 服务器可以在测试中启动和停止

问题:

如何创建在启动时调用 server.listen 的启动脚本?目前它的启动方式是:

"scripts": {
    "test": "mocha --reporter spec",
    "start": "nodemon server.js"
  }

^-- 我想在上面的脚本中添加对 server.listen() 的调用。

最佳答案

您可以使用以下代码测试该脚本是否已从命令行调用或由另一个脚本require调用:

const PORT = process.argv[2] || 8080; // whatever port number

if (require.main === module) {

   this.server.listen(PORT); // to start listening

   // or, if you are certain that it will always be
   // called the same way... you could apply a slice
   // of process.argv to server.listen
   //
   // this.server.listen.apply(this.server, process.argv.slice(2))
   //
   // https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback
}

如果直接调用它,这将立即启动您的服务器监听,如果被另一个脚本使用,则等待在导入的模块上调用监听。

您可以将可选的端口参数传递给 npm 启动脚本,如下所示:

"start": "nodemon server.js 8001"

关于javascript - Node.js 启动时运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688678/

相关文章:

javascript - 检测 HTML Canvas 中某些点的鼠标悬停?

Javascript 复杂类

javascript - 我使用 auth0 进行用户身份验证,并且有一个用于 CRUD 帖子的 API(标题、img、desc)。如何对 CRUD api 进行经过身份验证的调用?

javascript - 悬停 <li> 时,内部 <ul> 必须滑动下一个 <li>

node.js - 网络 worker 线程 : is it OK to use "require" inside worker?

node.js - AWS Cloud9 `process.versions.node` 未定义?

node.js - 如何配置 express router 和 ES6?

node.js - 如何使用nodejs、express和mongoose在一个函数中保持两个操作的一致性

javascript - 我可以在 app.get 中使用不同路径的 app.use

javascript - 如何在javascript中访问这个数组