在我的應用程序中,我實例化了一個名爲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
方法和核心對象的快捷方式,做同樣的事情。
任何想法表示讚賞。有一段時間我正試圖解決這個問題。
乾杯!