Доступ к конфигурационным переменным из других файлов конфигурации

У меня возникают проблемы с использованием в конфигурационном файле config var, установленного в другом файле конфигурации. Например.

// file - config/local.js
module.exports = {
  mongo_db : {
    username : 'TheUsername',
    password : 'ThePassword',
    database : 'TheDatabase'
  }
}

// file - config/connections.js
module.exports.connections = {
  mongo_db: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017,
    user: sails.config.mongo_db.username,
    password: sails.config.mongo_db.password,
    database: sails.config.mongo_db.database
  },
}

Когда я поднимаю паруса, я получаю следующую ошибку:

user: sails.config.mongo_db.username,
      ^
ReferenceError: sails is not defined

Я могу получить доступ к переменным конфигурации в других местах - например, это работает:

// file - config/bootstrap.js
module.exports.bootstrap = function(cb) {
  console.log('Dumping config: ', sails.config);
  cb();
}

Отбрасывает все настройки конфигурации на консоль - я даже вижу настройки конфигурации для mongo_db там!

Я так запутался.

Ответ 1

Вы не можете получить доступ к sails внутри файлов конфигурации, так как конфигурация Sails по-прежнему загружается, когда эти файлы обрабатываются! В bootstrap.js вы можете получить доступ к конфигурации внутри функции начальной загрузки, поскольку эта функция вызывается после загрузки Sails, но не выше функции.

В любом случае config/local.js объединяется поверх всех других файлов конфигурации, поэтому вы можете получить то, что хотите:

// file - config/local.js
module.exports = {
  connections: {
    mongo_db : {
      username : 'TheUsername',
      password : 'ThePassword',
      database : 'TheDatabase'
    }
  }
}

// file - config/connections.js
module.exports.connections = {
  mongo_db: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017
  },
}

Если вам действительно нужен один файл конфигурации из другого, вы всегда можете использовать require, но это не рекомендуется. Поскольку Sails объединяет файлы конфигурации на основе нескольких факторов (включая текущую среду), возможно, вы будете читать некоторые недопустимые параметры. Лучше всего делать то, что вам нужно: используйте файлы config/env/* для настроек среды (например, config/env/production.js), config/local.js для настроек, характерных для одной системы (например, вашего компьютера) и остальных файлов для общих настроек.