2015-06-14 4 views
0

Внутри handler.js и я экспортировал 2 функции. Один для initialize() и других handle(). Инициализация функции используется для загрузки динамика обработчика в зависимости от настроек приложения. И я разделил переменную var handler вне функции module.exports.Как разделить область внутри module.exports

handler = new Handler(app); новый экземпляр создал назначение общей переменной var handler. А затем внутри handle() функция с общей переменной var handler. использовано

Динамически require() файл в режиме веб-запроса не является хорошей идеей. Таким образом, метод 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

Не уверен, что я понял, почему вам нужно удалить «обработчик», промежуточное ПО завершается в IIFE и кэшируется узлом в любом случае? – 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; 
     }); 

    } 
}; 

Теперь требование будет вызываться только один раз, поскольку узел будет кэшировать его для вас.

Смежные вопросы