在Express.js中间件中传递的参数会被缓存吗?

时间:2012-09-10 11:25:16

标签: node.js express closures middleware

我一直在使用express.js构建我的第一个node.js应用程序。 一直很有趣:) 我一定有某种误解,所以这里就是。

我有一些定义的路线:

app.all('/account/summary', apiPOST('AccountSummary', {FromDate: 'default', ToDate: 'default'}), function(req, res){

  var data=req.apiJSON;
  console.log(data);
  res.render('accountsummary', {locals: data, layout: 'layouts/layout'});

});

apiPOST()定义如下:

apiPOST = function (operation, postParams) {

  return function (req, res, next){

    console.log('RIGHT AT START');
    console.log(postParams);
    console.log('END');

    var currentDate = new Date();
    var day = ('0'+currentDate.getDate()).slice(-2);
    var month = ('0'+(currentDate.getMonth() + 1)).slice(-2);
    var year = ('0'+currentDate.getFullYear()).slice(-4);
    console.log('BEFORE DATES');
    console.log(postParams);
    if (typeof(postParams.FromDate)!='undefined' && (postParams.FromDate=='default' || postParams.FromDate=='')){
      postParams.FromDate=year+'-'+month+'-'+day;
    }

    if (typeof(postParams.ToDate)!='undefined' && (postParams.ToDate=='default' || postParams.ToDate=='')){
      postParams.ToDate=year+'-'+month+'-'+day;
    }

    //automatically add all posted data to postParams
    if (typeof(req.body)!='undefined'){
      for (var key in req.body){
        if (req.body.hasOwnProperty(key)){
          postParams[key]=req.body[key];
        }
      }
    }

    // here is do some talking to an XML web service and convert it to JSON;
    // we use our postParams variable to POST
    next();

  }
}

首先,这个工作正常。当在GET请求上到达页面时,它默认FromDate和ToDate为今天。此页面包含一个表单,您可以发布该表单以指定新的FromData和ToDate。发布的数据会自动添加到postParams中,并且也可以正常工作。

我遇到的问题是,下次用户使用GET访问该页面时,之前的POSTed数据仍然存在,因此默认为该而不是今天。

我无法弄清楚为什么这些数据仍然可用。从它的外观来看,它没有被发布,而是在postParams中被记住。 postParams现在是全球性的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

正在发生的事情是,您只需要调用apiPOST一次,在app.all调用期间配置该路由,并且一次调用创建一个postParams参数对象,以后所有调用apiPOST返回的函数将共享。