2015-06-14 55 views
0

在handler.js里面我导出了2个函数。一个用于initialize()和其他handle()。初始化函数用于根据应用程序设置加载处理程序动态。我在module.exports函数之外共享变量var handler如何在module.exports中共享作用域

handler = new Handler(app);创建新实例分配给共享变量var handler。然后在handle()函数共享变量var handler里面。使用

动态require() Web请求时间中的文件不是好主意。所以initialize()方法在应用程序启动时创建和调用。

让我知道,建议删除共享变量“处理”

var handler; 

module.exports = { 

    initialize : function (app){ 
     var Handler = require(path.resolve(app.basedir, app.settings.handler)); 
     handler = new Handler(app); 
    }, 

    handle : function handle(ctx) { 

     var urlToHandle = ctx.url; 

     return handler.resolveURL(ctx) 
     .then(function (json) { 
      ctx.layoutJSON = json; 
      return ctx; 
     }) 
     .catch(function (e) { 
      throw e; 
     }); 

    } 
}; 
+0

不知道我明白了,为什么你需要删除'handler',中间件被封装在IIFE中,并且被Node缓存呢? – adeneo

回答

0

不知道如果我得到了您的权利,但如果你调用initialize只有一次,你可以做这样的事情:

var app  = require('path-to-a-file-which-return-app'); 
var Handler = require(path.resolve(app.basedir, app.settings.handler)); 
var handler = new Handler(app); 

module.exports = { 

    handle : function handle(ctx) { 

     var urlToHandle = ctx.url; 

     return handler.resolveURL(ctx) 
     .then(function (json) { 
      ctx.layoutJSON = json; 
      return ctx; 
     }) 
     .catch(function (e) { 
      throw e; 
     }); 

    } 
}; 

现在这个require只会被调用一次,因为Node会为你缓存它。