节点模块缓存

时间:2015-08-19 16:41:04

标签: javascript node.js express

我正在使用express创建应用程序,我遇到了使用module.exports的问题。我有一条路线可以处理用户根据订单创建pdf的情况。为了保持模块化,我将路由功能分离为模块,并在必要时要求它们,例如:

Route1.js

module.exports = function(req, res){
   // route functionality
};

路由/ index.js

Route1 = require('./Route1');
router.post('/api/v1/route1', Route1);

这一直非常有效地保持组织有序,但我创建了一个具有许多复杂功能的路由,并且似乎存在缓存问题。我第一次调用路由它工作正常,但第二次调用它时它会陷入无限循环,因为上一个请求中的一个变量是持久的,它永远不会从循环中断开,因为它大于它需要等于循环退出的数字。我甚至在通过module.exports传递的函数的开头重置所有变量。

要解决此问题,我不再导出路由功能,而是将其直接传递给路由。这是一个例子:

每次都有效

router.post('/api/v1/dostuff', function(req, res){
    var count = 0;

    var doSomething = function(){
       // if count === something else break
       // else add one to count and run this function again
    }
});

第一次使用

do_something.js

module.exports = function(req, res){
    var count = 0;

    var doSomething = function(){
       // if count === something else then break out and do something else
       // else add one to count and run this function again

       // This works the first time but the second time 
       // count is persisting and it is already greater than 
       // the number I am checking against so it 
       // never breaks out of this function
    }
};

路由/ index.js

var doSomething = require('./do_something.js');

// Only works as expected the first time the call is made
router.post('api/v1/dosomething', doSomething);

那么为什么在使用module.exports时我的功能只能按预期工作一次?我在想与节点模块缓存有关。

1 个答案:

答案 0 :(得分:0)

我对模块缓存非常不确定,但我的应用程序中有一些功能与您的功能非常相似。所以我希望你尝试像这样的导出模块

something.controller.js

exports.doSomething = function(req, res){
  // your code
}

和index.js

var controller = require('./something.controller.js');

router.post('/api/v1/dosomething', controller.doSomething);

希望这个帮助