Node.js-试图了解单例

时间:2019-03-21 12:13:26

标签: javascript node.js

我在我的项目中实现单例模式时遇到问题,该模式在NodeJS上运行(据我所知,版本8)。我创建了一个Logger类,当我们想将某些东西记录到控制台或数据库中时,我想使用它。最初,我将其实现为此类:

class Logger {
    constructor() {
    }

    log() {
    }

    logToDatabase() {
    }

}

module.exports = new Logger()

我能够从其他类中调用const logger = require('./Logger')并使用logger.log()函数。然后,我进行了一些研究,并在StackOverflow上找到了一个帖子,有人建议实现这样的模块:

module.exports = {

  log: () => {
  },


  logToDatabase: () => {
  }

}

因此,我更改了代码,一切(几乎)仍然可以正常工作。我想从另一个logger.log()文件(在其.js函数中)调用module.exports时遇到问题,如下所示:

another_file.js

const logger = require('./Logger')
module.exports = {

  foo: () => {
      logger.log()
  }
}

错误是logger.log()不是函数。

我设法通过执行以下操作来解决它:

var logger
module.exports = {

init: () => {
    logger = require('./Logger')
},

foo: () => {
    logger.log()
}

}

在我对主init文件中的foo进行任何调用之前,我确保先调用index.js函数。

这似乎现在可以正常工作,而且我没有收到任何错误,但是我想确保自己以有效的方式进行操作,而不是通过使用一些廉价的hack来解决问题,但这种方法似乎没什么问题。我还想了解为什么会遇到此问题(我想这可能是由于我不了解module.exportsrequire的实际工作原理而引起的。我是否认为这可能是由于使用了不同的模块导致的?我在代码中有一个“警告”,说我们正在使用CommonJS,并且可以将其转换为ES6。我听说过Babel,它允许您将代码从一个模块转换为另一个模块(如果我理解正确的话),尽管这个项目在一周时间内结束,我想避免使用新事物。

感谢您的帮助!

0 个答案:

没有答案