【问题标题】:NodeJS business logic and current context dataNodeJS 业务逻辑和当前上下文数据
【发布时间】:2016-03-30 10:27:27
【问题描述】:

我们现在在 NodeJS 上苦苦挣扎,因为我们不想通过大量回调传递一些基于请求的通用数据。我们在一个远程方法中有多个异步调用、更改、更新,我们需要能够在每个步骤中提取 sessionId 和 customerId,而无需将它们作为参数传递给每个函数。这是我们尝试过的:

  1. 写入“app”对象是不安全的,并且会被多个同时请求覆盖。
  2. 写入“ctx.req”对象不会改变任何内容,因为您需要将“req”对象传递给所有回调。

是否有一种处理基于请求的上下文的好方法,您可以在应用程序的任何地方使用,或者您仍然需要在任何地方传递一些变量?

【问题讨论】:

    标签: node.js express request datacontext


    【解决方案1】:

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

    这样的持久性存储

    Redis 或 Memcached 或 Firebase(服务)

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

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

    【讨论】:

    • 但在这种情况下,您需要通过所有回调传递“sessionId”...
    【解决方案2】:

    您可以使用 javascript 的优点,例如 Ex:

    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 的此功能作为请求中的上下文。每个req的id值都不一样

    【讨论】:

      猜你喜欢
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2011-10-23
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多