2016-02-05 1 views
1

У меня есть файл конфигурации (упрощенный ниже) для приложения Node.jsЛучший способ использовать файл конфигурации в Node.js

module.exports = function(){ 
    var settings = { 
    port: '8088' 
    }; 
    settings.mysql = { 
    host : 'localhost', 
    database : 'test' 
    }; 
    // Override default settings 
    switch(process.env.NODE_ENV){ 
    case 'production': 
     settings.port = 8082; 
    break; 
    case 'staging': 
     settings.port = 8083; 
    break;  
    } 
    return settings; 
}; 

Когда я начинаю мое приложение Express.js я требую этого файла для некоторых базовые настройки:

var Config = require('./config'), settings = new Config(); 
var port = process.env.PORT || settings.port; // set our port 

Мне также необходимо использовать настройки MySQL в этом файле позже в DAO (в моей модели). В этот момент я называю конфигурационный файл (который будет запускать его снова)

var Config = require('../config'), settings = new Config(); 
var mysql = require('mysql'); 
var pool = mysql.createPool(settings.mysql); 

Очевидно каждый раз, когда я «требуется» файл получает работать, это просто кажется ленивым/неэффективным. Должен ли я хранить возвращаемую переменную в глобальной переменной, которую может видеть мой DAO, или мне нужно передать ее ссылкой?

Я в какой-то момент подумал о том, чтобы сделать это промежуточным программным обеспечением и добавить его в ЗАПРОС, но тогда мне понадобится мой маршрут (контроллер), чтобы передать его в DAO (модель), который не чувствует себя хорошо.

ответ

1

Просто экспортируйте сам объект, а не обертывайте его в функцию. Модули узлов получают кеширование после первой загрузки, поэтому он не будет снова запускать логику.

var settings = { 
    port: '8088' 
}; 

settings.mysql = { 
    host : 'localhost', 
    database : 'test' 
}; 

// Override default settings 
switch(process.env.NODE_ENV){ 
    case 'production': 
    settings.port = 8082; 
    break; 
    case 'staging': 
    settings.port = 8083; 
    break;  
} 

module.exports = settings; 
+0

Я не знаю, как кэш-память работает точно (и я слишком ленив, чтобы проверить прямо сейчас), но я не удивлюсь, если он работал даже с функцией, так как это, вероятно, 'модуль 'который кэшируется. – jcaron

+0

Проблема, скорее всего, связана с разным путем, но не уверен, что узел канонизирует пути (до полного пути) или использует его как есть. – jcaron

+0

@jcaron - Я бы предположил, что функция, вероятно, будет кэшироваться, но все равно кажется глупым повторять ее каждый раз, чтобы получить тот же результат. Но вы правы, я не уверен на 100%, как кеширование взаимодействует с разными относительными путями, мне нужно будет изучить это! –

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

  • Нет связанных вопросов^_^