将一个参数通过require-module传递给Nodejs中的ES6类

时间:2017-04-05 17:46:34

标签: node.js ecmascript-6

我正在学习在NodeJS中使用ECMAScript6 -styled类(7.7.3)。我使用过这种编程风格:

//app.js
var forecastHandler = require('./forecastHandler.js');

//forecastHandler.js
class ForecastHandler {
  constructor() {}
}

module.exports = new ForecastHandler()

直到现在它一直运行良好,因为我必须将参数传递给模块。

//app.js
var forecastHandler = require('./forecastHandler.js')(3600);

//forecastHandler.js
class ForecastHandler {
  constructor(cacheUpdateDelay) {}
}

module.exports = new ForecastHandler(cacheUpdateDelay)

我收到此错误:ReferenceError:未定义cacheUpdateDelay。 我可以使用ES6样式的类将参数传递给ForecastHandler-module并在module.exports创建一个对象吗?如果我只导出类并在app.js中创建对象,代码可以工作,但它的语法很难看。

//app.js
var forecastHandlerClass = require('./forecastHandler.js');
var forecastHandler = new forecastHandlerClass(3600);

//forecastHandler.js
module.exports = ForecastHandler

编辑:更好的例子

1 个答案:

答案 0 :(得分:1)

module.exports = new ForecastHandler(cacheUpdateDelay)

此代码的问题在于它在首次运行代码时初始化对象。

require('./forecastHandler.js')表示“执行forecastHandler.js中的所有代码并给我exports对象。这意味着当没有{时,JS引擎会尝试运行new ForecastHandler(cacheUpdateDelay) {1}}已创建。

执行此操作的简单方法是您提供的方法。加载类,然后尝试创建它的新实例。如果确实想要单行,您可以在cacheUpdateDelay中执行此操作:

app.js

还有其他各种方法可以做到这一点。最简单的方法是不导出类而是函数。

例如,您可以在模块文件中执行此操作:

var forecastHandler = new (require('./forecastHandler.js'))(3600);