gpt4 book ai didi

javascript - 用于获取执行上下文的 Node.js 编程模式

转载 作者:IT老高 更新时间:2023-10-28 23:01:41 25 4
gpt4 key购买 nike

我正在用 node.js 编写一个 Web 应用程序。现在,服务器上的每个处理都始终在 session 的上下文中,该 session 在请求到达服务器的第一阶段被检索或创建。在此之后,执行流经多个模块和其中的回调。我正在努力创建一种编程模式,以便在代码中的任何点都可以使用 session 对象,而程序员不需要它在每个函数调用中将其作为参数传递。

如果所有代码都在一个文件中,我可以有一个闭包,但是如果在其他文件中有对其他模块的函数调用,我该如何编程以便 session 对象在被调用函数中可用,而不将其传递为一个论点。我觉得这两个文件中的两个函数之间应该有一些联系,但是如何安排这就是我卡住的地方。

一般来说,我想说总是有一个执行上下文,它可以是一个 session 或一个网络请求,其处理分布在多个文件中,并且执行上下文对象将在所有点都可用。实际上可以有多个用例,例如每个网络请求有一个 Log 对象或每个 session 有一个 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

}

最佳答案

您可以使用 Domains 来实现这一点 - 一个新的 Node 0.8 功能。这个想法是在它自己的域中运行每个请求,为每个请求的数据提供一个空间。您可以访问当前请求的域,而无需通过 process.domain 将其全部传递。

这是一个设置它以使用 express 的示例: How to use Node.js 0.8.x domains with express?

请注意,域通常是实验性的,特别是 process.domain 是未记录的(尽管显然不会在 0.8 中消失,并且有一些关于使其永久化的讨论)。我建议按照他们的建议,向 process.domain.data 添加一个特定于应用程序的属性。

https://github.com/joyent/node/issues/3733

https://groups.google.com/d/msg/nodejs-dev/gBpJeQr0fWM/-y7fzzRMYBcJ

关于javascript - 用于获取执行上下文的 Node.js 编程模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com