在我的应用程序中,我实例化了一个名为controller
的应用程序范围对象。另外,我正在启动一台服务器。由于我想保持冗余低,每个请求我想实例化一个前端controller
,这是一个复制/参考controller
,但与另一个pool
财产,其中包含请求宽对象/配置,可以从controller
。定义具有其他上下文特定属性的引用
var applicationPool = new ObjectPool(); // container for objects
var controller = new Controller(); // application wide instance
var server = http.createServer();
applicationPool.set("myController", controller);
server.on("request",function(req,res){
var requestPool = new ObjectPool();
requestPool.set("request",req);
requestPool.set("response",res);
/*
* pool population
* routing
* controller resolving
* parameter resolving
*/
// frontend specific to current request
var frontend = applicationPool.get("myController").create(requestPool);
// hopefully finishes res
frontend.greetAction(parameters);
/*
* post response actions
*/
}
server.listen(3000);
而且Controller
类:
function Controller(){
BaseController.call(this);
// ...
}
function greetAction(parameters){
var res = this.getObjectPool().get("response"); // defined in BaseController
res.end(format("Greetings, %s!",parameters["name"]));
}
Controller.prototype = Object.create(BaseController.prototype);
Controller.prototype.greetAction = greetAction;
附加我约BaseController
类的想法:
function BaseController(){ ... }
function getObjectPool(){
return this.pool;
}
function create(pool){
var frontend = Object.create(this.__proto__, this);
frontend.pool = pool;
return frontend;
}
BaseController.prototype.getObjectPool = getObjectPool;
BaseController.prototype.create = create;
这是我被困。对于我测试的。如果我将pool
添加到frontend
它也适用于controller
对象。我正在考虑创建一个新对象并追加controller
的所有属性。我还看了一下代理,controller
作为目标,get
陷阱为getObjectPool
。
我知道直接修改res
是不好的做法。相反,我可能会返回string
/buffer
。但所描述的问题仍然存在。正如我计划嵌入其他控制器。
我来自PHP + Symfony,你有一个Controller
类与getContainer
方法和核心对象的快捷方式,做同样的事情。
任何想法表示赞赏。有一段时间我正试图解决这个问题。
干杯!