2015-06-14 53 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會爲你緩存它。