【问题标题】:node.js run method on startupnode.js 在启动时运行方法
【发布时间】:2017-06-22 01:30:49
【问题描述】:

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 函数是这样的:

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

问题:

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

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

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

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

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

    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 脚本:

    "start": "nodemon server.js 8001"
    

    【讨论】:

    • 非常感谢瑞恩!现在试试看。你能告诉我如何在测试中启动服务器吗?
    • 不客气,贾斯珀! mocha 分别在 beforeafter 函数回调中使用设置和拆卸逻辑。所以,before 可能看起来像这样:var server = require('./server') before((done) => { server.listen(PORT, done) }) 和拆卸像这样:after(() => { server.close() })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2020-08-30
    • 2023-01-25
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多