代码之家  ›  专栏  ›  技术社区  ›  hellzone

如何通过nodejs将变量传递给其他模块?

  •  0
  • hellzone  · 技术社区  · 6 年前

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

    logServiceClient{}
    

    是否有任何方法可以将LogServiceClient传递给所有其他包含的模块?

    服务器文件;

    ....
    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))
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Steven Spungin    6 年前

    有很多方法 注入 不需要从其他模块中拉入记录器。

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

    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')

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

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

    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')

    使日志程序全球化

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

    // 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)
        2
  •  1
  •   Ioannis Perpirakis    6 年前

    //FIL1.JS

    var foo = "bar";
    exports.foo = foo;
    

    //FIL2.JS

    var myModule = require('./file1');
    var foo = myModule.foo;