我想将 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/