访问请求上下文

时间:2016-01-01 13:45:24

标签: node.js express

我正在使用Express,每次使用日志调试和跟踪我的应用程序时,我都需要访问请求中的一些数据(标题,cookie等)。

使用其他语言(即:Java)我有“线程上下文”,我可以放置该数据,因此每当我记录某些内容时都可以访问它。但据我所知,使用NodeJS并没有这样的事情,因为我们只有一个线程。

我试图避免在每个函数中传递req变量,以便我可以记录该信息。

是否有节点或快递功能让我可以在任何地方获取数据?

2 个答案:

答案 0 :(得分:12)

看看Continuation Local Storage,它实现类似于异步调用链的线程上下文的内容:https://github.com/othiym23/node-continuation-local-storage

此外,还努力将异步本地存储作为标准化功能构建到javascript本身,但它们仍处于初期阶段:TC39区域提案https://docs.google.com/presentation/d/1H3E2ToJ8VHgZS8eS6bRv-vg5OksObj5wv6gyzJJwOK0

答案 1 :(得分:-3)

JavaScript是单线程的这一事实不是一个限制,也不会阻止使用"线程上下文"作为一种使用普遍可及的状态的手段"。一旦进行异步调用并且状态不再与您想要的状态匹配,问题就会开始。

这是全球国家被考虑的原因之一"坏习惯"你应该瞄准避免它(在JavaScript和/或节点开发时不是特别......)。

相反,应该传递一个对象,而不是req。您应该构建对象或调用函数,以便传递与每个调用链相关的log实例(从请求事件开始并通过所有内部调用)。应该使用记录所需的任何上下文来初始化log实例,并且在您的情况下,来自原始req的请求详细信息。