NodeJS业务逻辑和当前上下文数据

时间:2016-03-30 10:27:28

标签: node.js express request datacontext

我们现在正在努力使用NodeJS,因为我们不希望通过大量回调传递一些基于请求的通用数据。我们在一个远程方法中有多个异步调用,更改,更新,我们需要能够在每个步骤中提取sessionId和customerId,而不将它们作为参数传递给每个函数。以下是我们的尝试:

  1. 写入“app”对象不安全,并被多个同时请求覆盖。
  2. 写入“ctx.req”对象不会改变任何内容,因为您需要将“req”对象传递给所有回调。
  3. 是否有一种很好的方法可以处理基于请求的上下文,您可以在应用程序的任何位置使用,或者您仍然需要在任何地方传递一些变量?

2 个答案:

答案 0 :(得分:0)

Node.js最适合实现无状态服务器。我不知道你的代码库和架构。但我想你需要使用像

这样的持久性存储
  

Redis或Memcached或Firebase(服务)

每个会话都有一个令牌。并使用此标记从持久性存储中获取对象。在实现无状态服务器时,这是一种非常标准的方法。 Firebase提供了实时更新的附加优势,甚至可以在需要时完全绕过服务器。

您可能需要显示一些代码和设计才能获得更好的答案。

答案 1 :(得分:-1)

您可以使用像Ex:

这样的javascript功能
var topFunction={
firstFunction:function(){
console.log(id);
------//work you want to do
},
secondFunction:function(){
console.log(id);
---//work you want to do
}
}


function test(){
var arr=[2,3,4,5,6,7];
topFunction.id=10;
async.map(arr,topFunction.firstFunction.bind(topFunction),function(err,result){

})
  

每次在异步调用中都有相同的id,这是使用异步调用的最佳方式。你不需要一次又一次地发送id。你可以在请求中使用javascript的这个特性作为上下文。每个请求的id值都不同