node.js在启动时运行方法

时间:2017-06-22 01:30:49

标签: 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);
};

listen和close函数是这样的:

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

问题:

如何创建在启动时调用server.listen的启动脚本?目前推出时带有:

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

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

1 个答案:

答案 0 :(得分:1)

您可以测试脚本是否已从命令行调用,或者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
}

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

你可以将一个可选的port参数传递给npm start脚本,如下所示:

"start": "nodemon server.js 8001"