Подтвердить что ты не робот

Лучший способ сохранить конфигурацию БД в Node.Js/Express app

Каким будет лучший способ сохранить конфигурацию DB (имя пользователя, пароль) в приложении с открытым исходным кодом, которое работает на node.js/Express? Два конкретных вопроса:

  • Должен ли я помещать его в отдельный файл config.js в папку /lib, например, и никогда не включать его в основной репозиторий, который общедоступен в GitHub?

  • Чтобы включить конфигурацию, это так же просто, как require('./config.js') из файла, который ему нужен, или есть лучший способ сделать это?

PS извините, если вопросы кажутся немного простыми или не так хорошо сформулированными, но я только начинаю:)

4b9b3361

Ответ 1

Не уверен, что это лучшая практика, но лично у меня есть файл config.json, где я храню информацию о подключении к db. Затем я делаю следующее:

// options.js
var fs = require('fs'),
configPath = './config.json';
var parsed = JSON.parse(fs.readFileSync(configPath, 'UTF-8'));
exports.storageConfig=  parsed;

Затем из другого файла я делаю следующее:

var options = require('./options');

var loginData = {
        host: options.storageConfig.HOST,
        user: options.storageConfig.user,
        password: options.storageConfig.password
};

Ответ 2

Вот как я это делаю:

Создайте config.js, который содержит объекты, представляющие ваши конфиги:

var config = {
development: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        host:   '127.0.0.1',
        port:   '27017',
        db:     'site_dev'
    },
    //server details
    server: {
        host: '127.0.0.1',
        port: '3422'
    }
},
production: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        host: '127.0.0.1',
        port: '27017',
        db:     'site'
    },
    //server details
    server: {
        host:   '127.0.0.1',
        port:   '3421'
    }
}
};
module.exports = config;

Затем в моем index.js(или где-то действительно),

var env = process.env.NODE_ENV || 'development';
var config = require('./config')[env];

Затем обработайте этот объект, например

var server = express();
server.listen(config.server.port);
...

Ответ 3

Я помещаю в args. так же, как порт из-за большого количества примеров node.js. вы, скорее всего, навсегда, pm2, nodemon для запуска вашего приложения. поэтому эта переменная не проверяется как часть вашего исходного кода. и они также доступны по всему миру.

process.env.PORT
process.env.DATABASE_USER
process.env.DATABASE_PASSWORD


PORT=3000 DATABASE_HOST=localhost DATABASE_USER=admin DATABASE_PASSWORD=mypassword node app.js

export PORT=3000
export DATABASE_HOST=localhost
export DATABASE_PORT=27017
export DATABASE_USER=admin
export DATABASE_PASSWORD=mypassword
node app.js

var server = app.listen(process.env.PORT, function() {
});

var mongoClient = new MongoClient(new Server(process.env.DATABASE_HOST, process.env.DATABASE_PORT));

Ответ 4

Для запуска игрушечных приложений, где мне нужно скрыть учетные данные db, я использую модуль dotenv.

Поместите свою конфиденциальную информацию в .ENV файл (который является .gitignored), поместите require('dotenv').config(); в ваше приложение; dotenv создает записи в process.env, к которым вы можете обратиться.

.env файл:

DATABASE_PASSWORD=mypw
DATABASE_NAME=some_db

Для обозначения значений:

process.env.DATABASE_PASSWORD

Ответ 5

Чтобы включить конфигурацию, это так же просто, как require ('./config.js') из файла, который ему нужен, или есть лучший способ сделать это?

Это правильный способ хранения файлов конфигурации.

Лучшим подходом было бы написать все ваше приложение, как обычный node.js модуль, и написать небольшой загрузочный файл, который его вызывает. Эта идея также позволяет использовать разные драйверы базы данных, используя инъекцию зависимостей.

Хорошее, но не идеальное решение - это окружающая среда. Он распределяется между всеми приложениями, поэтому, если у вас есть определенные данные, которые вы хотите использовать для всех из них, это лучший выбор. Но если у вас есть конфиг для одного конкретного приложения, это не так.

PS: И, пожалуйста, не используйте JSON для этого. Это наихудшая идея.:)

Ответ 6

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

config.coffee

exports.setEnvironment = (env) ->
    switch env
        when "development"
            exports.DEBUG_LOG = true
            exports.DB_PORT = '27017'
            # ...
        when "testing"
            exports.DEBUG_ERROR = true
            exports.DEBUG_CLIENT = true
            # ...
        when "production"
            exports.DEBUG_LOG = false
            # ...
        else console.log "environment #{env} not found"

server.coffee:

config = require('./config')
config.setEnvironment env