От переводчика: Это седьмая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.
Предыдущие статьи:
- "Охотимся за утечками памяти в Node.js"
- "Нагружаем Node под завязку"
- "Храним сессии на клиенте, чтобы упростить масштабирование приложения"
- "Производительность фронтэнда. Часть 1 — конкатенация, компрессия, кэширование"
- "Пишем сервер, который не падает под нагрузкой"
- "Производительность фронтэнда. Часть 2 — кешируем динамический контент с помощью etagify"
В этой статье из цикла о Node.js мы рассмотрим модуль node-convict, который помогает управлять конфигурациями приложений Node.js. Он предоставляет прозрачные настройки по умолчанию и встроенную типизацию, чтобы было легче находить и исправлять ошибки.
Постановка задачи
Есть две основные проблемы, которые создают необходимость в конфигурации приложений:
- Большинство приложений могут работать в нескольких окружениях, имеющих разные параметры конфигурации.
- Включение учётных данных и другой конфиденциально информации в код приложения может создавать проблемы.
Эти проблемы можно решить, инициализируя некоторые переменные в зависимости от текущего окружения и используя переменные окружения для хранения конфиденциальных данных. Общепринятый в среде Node.js шаблон для реализации этого подхода состоит в создании модуля, который экспортирует конфигурацию:
var conf = {
// окружение приложения -
// "production", "development", или "test
env: process.env.NODE_ENV || "development",
// IP адрес
ip: process.env.IP_ADDRESS || "127.0.0.1",
// Порт
port: process.env.PORT || 0,
// Настройки БД
database: {
host: process.env.DB_HOST || "localhost:8091"
}
};
module.exports = conf;
Это работает неплохо, но есть ещё пара проблем:
- Что если в конфигурации указаны некорректные данные? Мы можем сберечь время и нервы, обнаруживая ошибки как можно раньше.
- Насколько легко разобраться в конфигурации администраторам, тестировщикам и другим членам большой команды, когда им надо менять настройки или искать дефекты? Более декларативный и лучше документированный формат сделал бы их жизнь легче.