javascript - 如何使用 NodeJS 将变量传递给其他模块?

标签 javascript node.js

我想将 logServiceClient 对象传递给 server.js 文件中包含的所有其他模块。当我运行下面的代码时,它会打印空对象;

logServiceClient{}

有什么方法可以将 logServiceClient 传递给所有其他包含的模块吗?

server.js 文件;

....
const logger = new Logger({
   level: new CLevel('warn'),
   ordered
}) 

var logServiceClient = require('./app/logServiceClient')(logger)
var userHandler = require('./app/userHandler')(logServiceClient)

用户处理程序文件;

module.exports = function(logServiceClient){
    console.log('logServiceClient' + JSON.stringify(logServiceClient))
}

最佳答案

有很多方法可以注入(inject),而无需从其他模块中拉入记录器。

使用工厂间接创建和初始化您的对象/模块

function factoryCreateModule() {
  var client = require('client')
  client.$logger = require('logger')
}

function factoryRequireModule(module) {
  var client = require(module)
  client.$logger = require('logger')
}

var client = factoryCreateModule()
client.logger.log('hello')

var client2 = factoryRequireModule('client')
client2.logger.log('hello')

使用原型(prototype)将记录器添加到所有对象

当然你可以缩小目标对象的范围...

var logger = {
  log(message) {
    console.log(message)
  },
  warn(message) {
    console.log('!!! ' + message)
  }
}

Object.prototype.$logger = logger

var x = 12;
x.$logger.log('I am a number')

var str = "Hello"
str.$logger.warn('WARNING FROM STRING')

使您的记录器全局化

global 是模块系统中的“窗口”。

// just for snippit to run
window.global = {}

var logger = {
  log(message) {
    console.log(message)
  }
}

// main module
global.$logger = logger

// client module
global.$logger.log('hello world')

将记录器传递给构造函数或 init 方法

var logger = require('logger')

var client = require('client')(logger)

var client2 = require('client2')({logger})

var client3 = require('client3')
client3.init(logger)

关于javascript - 如何使用 NodeJS 将变量传递给其他模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51517190/

相关文章:

javascript - 用于扫描特定数量的重复字符的正则表达式

node.js - 从具有 HasManyThrough 关系的模型中查询 - Strongloop api

javascript - 访问后端在另一个域上设置的 cookie

jquery ajax获取node express,如何获取json数据?

javascript - 关于这个对象字面量的问题

javascript - 将 css 类添加到 Angularjs 中的标记元素

javascript - jquery - 动态更改选项文本不起作用

javascript - 如何根据值更改所需表单输入的 CSS 样式

sql - NodeJS JSON 数组过滤

node.js - Node JS 新手 : why do I get a 404?( Angular 种子)