Использование JSON для конфигурации с Node.js? Прочитайте это и получите навыки настройки более 9000 ...
Примечание. Люди, утверждающие, что data = require ('./ data.json'); это
Угроза безопасности и отрицательный ответ людей с рьяным усердием: Вы совершенно и полностью не правы .
Попробуйте поместить не-JSON в этот файл ... Node выдаст вам ошибку, точно , как если бы вы сделали то же самое с намного медленнее и труднее кодировать файл руководства прочитайте и затем последующий JSON.parse (). Пожалуйста, прекратите распространять дезинформацию; ты делаешь больно миру, а не помогаешь. Узел был разработан , чтобы позволить это; это не угроза безопасности!
Правильное применение поставляется в 3+ слоях конфигурации:
- Конфигурация сервера / контейнера
- Конфигурация приложения
- (необязательно) Конфигурация клиента / сообщества / организации
- Конфиг пользователя
Большинство разработчиков относятся к конфигурации своего сервера и приложения так, как будто они могут измениться. Не может Вы можете изменять слои с более высоких слоев друг на друга, но вы изменяете базовые требования . Некоторым вещам нужно для существования! Сделайте так, чтобы ваш конфиг действовал так, как будто он неизменен, потому что в некоторой степени он так же, как и ваш исходный код.
Если вы не увидите, что многие ваши вещи не изменятся после запуска, это приведет к появлению анти-паттернов, таких как засорение вашей конфигурации загрузкой с помощью блоков try / catch и притворство, что вы можете продолжить без вашей правильной настройки приложение. Ты не можешь. Если вы можете, это относится к уровню конфигурации сообщества / пользователя, а не к уровню конфигурации сервера / приложения. Вы просто делаете это неправильно. Когда приложение завершает свою загрузку, дополнительные элементы должны быть расположены сверху.
Хватит биться головой о стену: ваш конфиг должен быть ультра простой .
Посмотрите, как просто настроить такую сложную инфраструктуру, как независимая от протокола и независимой от источника данных служба, с помощью простого файла конфигурации json и простого файла app.js ...
контейнер-config.js ...
{
"service": {
"type" : "http",
"name" : "login",
"port" : 8085
},
"data": {
"type" : "mysql",
"host" : "localhost",
"user" : "notRoot",
"pass" : "oober1337",
"name" : "connect"
}
}
index.js ... (двигатель, который питает все)
var config = require('./container-config.json'); // Get our service configuration.
var data = require(config.data.type); // Load our data source plugin ('npm install mysql' for mysql).
var service = require(config.service.type); // Load our service plugin ('http' is built-in to node).
var processor = require('./app.js'); // Load our processor (the code you write).
var connection = data.createConnection({ host: config.data.host, user: config.data.user, password: config.data.pass, database: config.data.name });
var server = service.createServer(processor);
connection.connect();
server.listen(config.service.port, function() { console.log("%s service listening on port %s", config.service.type, config.service.port); });
app.js ... (код, обеспечивающий работу службы, не зависящей от протокола и источника данных)
module.exports = function(request, response){
response.end('Responding to: ' + request.url);
}
Используя этот шаблон, вы теперь можете загружать файлы конфигурации сообщества и пользователей поверх загруженного приложения, dev ops готов поместить вашу работу в контейнер и масштабировать ее. Вы читаете за мультитенант. Userland изолирован. Теперь вы можете разделить вопросы о том, какой протокол службы вы используете, какой тип базы данных вы используете, и просто сосредоточиться на написании хорошего кода.
Поскольку вы используете слои, вы можете полагаться на единый источник правды для всего, в любое время (многослойный объект конфигурации), и избегать проверок ошибок на каждом шагу, беспокоясь о, о, черт, как я собираюсь чтобы этот работал без надлежащей настройки?!? ".