2014-09-30 49 views
2

我遇到了一个问题,我需要将某个变量绑定到模块上下文。我有两个文件夹:控制器和模型。在模型中,我有这样一个模型:如何将变量添加到模块上下文中 - Node.js

exports = { 
    name: String, 
    password: String 
} 

和控制器看起来是这样的:

exports = { 
    onMessage: (message) { 
    Model.doSomething(); 
    } 
} 

所以我需要访问模型的控制器,而不是要求-ING它。我不认为加载模型并将其提供给全球是这方面的良好做法。我正在寻找像MyNodeJsModule.addVarToContext(Model);

为什么我不想在控制器中需要模型的事情是,我需要通过外部系统加载模型,并让外部系统通过数据库访问模型替换模型。

+0

为什么不要求()呢? – Benedikt 2014-09-30 09:58:53

+0

请阅读最后。我需要通过需要它的外部系统来改变模型。之后,我需要将更改后的模型放入上下文中。 – Gelidus 2014-09-30 10:01:28

回答

0

可能你必须改变控制器这样?

module.exports = function(Model) { 
    return { 
     onMessage: function(message) { 
     Model.doSomething(); 
     } 
    }; 
} 
+0

有没有突出一个模型注入。另外,我可能想要在一个环境中注入更多。 – Gelidus 2014-09-30 14:27:53

+0

'你可以将一些变量设置为全局范围。但这不是一个好主意。因此,您可以选择:require vs参数(您可以将参数设置为数组或对象,并且您可以将模型传递到上下文) – Dilan 2014-09-30 14:43:55

+0

我知道这不是一个好主意,这就是为什么我正在寻找解决方案将变量绑定到上下文。 – Gelidus 2014-09-30 14:49:00

0

不太清楚你需要的究竟是什么,但你可以导出Controller构造函数,然后将每个实例绑定到一个特定的模式。

所以,在控制器:

// Constructor 
var Controller = function(model){ 
    this._model = model; 
} 

Controller.prototype.onMessage = function(message) { 
    this._model.doSomething(message); 
}; 

Controller.prototype.setModel = function(newModel){ 
    this._model = newModel; 
} 

exports.Controller = Controller; 

然后(外部):

var ModelController = require('./controller').Controller; 

var modelController1 = new ModelController(model1); 
var modelController2 = new ModelController(model2); 

modelController1.setModel(model2); 
modelController2.setModel(model1); 
+0

我想要的是,将模型注入到控制器中,然后我可以像调用全局变量一样调用它们,但它们是全局的,仅适用于一个模块。这就是为什么我想要上下文绑定。 – Gelidus 2014-09-30 20:42:29

相关问题