我正在使用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时我的功能只能按预期工作一次?我在想与节点模块缓存有关。
答案 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);
希望这个帮助