Rak*_*aks 16 javascript design-patterns node.js express
我正在node.js中编写一个Web应用程序.现在,服务器上的每个处理始终位于会话的上下文中,该会话在请求到达服务器时的第一阶段检索或创建.在此之后,执行流经多个模块并在其中进行回调.我正在努力的是创建一个编程模式,以便在代码中的任何一点,会话对象都可用,而程序员不需要它在每个函数调用中将它作为参数传递.
如果所有代码都在一个文件中,我可能有一个闭包,但如果有其他文件中的其他模块的函数调用,我如何编程,以便会话对象在被调用函数中可用而不将其作为参数传递.我觉得这两个文件中的两个函数之间应该有一些联系,但是如何安排这就是我遇到的问题.
一般而言,我想说总是存在一个执行上下文,它可以是一个会话或一个网络请求,其处理分布在多个文件中,并且执行上下文对象将在所有点上可用.实际上可能有多个用例,例如每个网络请求有一个Log对象,或者每个会话有一个Log对象.并且需要进行这项工作所需的管道应该是横向安装的,而不需要应用程序员来解决它.他只知道所有地方都可以使用执行上下文.
我认为这应该是每个人都面临的相当普遍的问题所以请给我一些想法.
以下是问题所在
MainServer.js
app = require('express').createServer();
app_module1 = require('AppModule1');
var session = get_session();
app.get('/my/page', app_module1.func1);
AppModule1.js
app_module2 = require('AppModule2');
exports.func1 = function(req,res){
// I want to know which the session context this code is running for
app_module2.func2(req,res);
}
AppModule2.js
exports.func2 = function(req,res){
// I want to know where the session context in which this code is running
}
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以使用Domains - 一个新的节点0.8功能来实现此目的.我们的想法是在它自己的域中运行每个请求,为每个请求数据提供一个空间.您可以访问当前请求的域,而无需通过process.domain将其全部传递.
这是一个让它设置为使用express的示例: 如何使用Express.js 0.8.x域名表达?
请注意,域通常在某种程度上是实验性的,特别是process.domain是未记录的(虽然显然不会在0.8中消失,并且有一些关于使其成为永久性的讨论).我建议按照他们的建议并向process.domain.data添加特定于应用程序的属性.
https://github.com/joyent/node/issues/3733
https://groups.google.com/d/msg/nodejs-dev/gBpJeQr0fWM/-y7fzzRMYBcJ
归档时间: |
|
查看次数: |
5551 次 |
最近记录: |