首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js使初始化对象在所有模块中都可用

Node.js使初始化对象在所有模块中都可用
EN

Stack Overflow用户
提问于 2013-09-06 03:19:29
回答 2查看 5.8K关注 0票数 5

我有一个在app.js文件中初始化的初始化对象,我想使这个初始化对象在所有模块中都可用。我怎么能这么做?将这个对象传递给每个模块是一种方法,我想知道我是否遗漏了什么,还是应该以不同的方式完成?

我看到猫鼬实际上支持默认连接,我需要在app.js中插入它一次,在其他模块中的任何地方,我只需要简单地使用它,而不需要传递它。我也能这样做吗?

我还检查了来自node.js http://nodejs.org/api/globals.html的全局对象文档,并想知道我是否应该使用全局发布。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-11 19:21:08

一个小小的建议:

  • 您应该很少需要使用全局的。如果你觉得你需要一个,你可能就不需要了。
  • 在Node.js中,单例通常是一种反模式,但是有时(日志记录、配置)他们会很好地完成工作。
  • 传递一些东西有时是一种有用和有价值的模式。

下面是一个示例,说明如何使用单例进行日志记录:

lib/logger.js

代码语言:javascript
运行
复制
var bunyan = require('bunyan'),
  mixIn = require('mout/object/mixIn'),

  // add some default options here...
  defaults = {},

  // singleton
  logger,

  createLogger = function createLogger(options) {
    var opts;

    if (logger) {
      return logger;
    }

    opts = mixIn({}, defaults, options);

    logger = bunyan.createLogger(opts);

    return logger;
  };

module.exports = createLogger;

lib/module.js

代码语言:javascript
运行
复制
var logger = require('./logger.js'),
  log = logger();

log.info('Something happened.');

希望这能有所帮助。

票数 10
EN

Stack Overflow用户

发布于 2013-09-06 03:57:12

正如您建议的那样,解决方案是将对象作为属性添加到全局对象中。但是,我建议不要这样做,不要将对象放在它自己的模块中,即required,而不是其他需要它的模块。稍后,您将以几种方式获得好处。首先,它总是明确该对象的来源和初始化的位置。在对象初始化之前,您永远不会尝试使用它(假设定义对象的模块也初始化它)。而且,这将有助于使您的代码更易于测试,

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18649350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档