Узел JS Express проекта, как добавить переменные среды - PullRequest
0 голосов
/ 11 января 2019

Я разработчик полного стека Java-скриптов. В vue js я создаю два файла в корне.

  1. env.development
  2. env.production

В моем main.js файле я могу получить доступ к переменным окружения, подобным этому

process.env.VUE_APP_MY_VARIABLE_X

Чем отличается производство и развитие от vue js, если я использую npm, запустите serve , проект загружает переменные среды разработки. Если я использую npm, запустите build , он принимает переменные производственной среды. Это все в пользу.

Но в моем expressjs проекте

"start": "nodemon server.js --exec babel-node -e js",

Эта команда всегда будет отвечать за запущенный проект. Я не мог найти две команды, как в VUE. Я иду, хотя учебники каждого тела говорят использовать пакет под названием dotenv .

Я не мог понять, как этот пакет может идентифицировать среды, в которых это производство, и это разработка.

В конце дня я хочу установить для моего пароля базы данных значение 123456 на моем локальном компьютере и root @ 123456 на сервере. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Vue.js обрабатывает режимы автоматически, в зависимости от команды (например, serve устанавливает NODE_ENV=development, а build устанавливает NODE_ENV=production). В зависимости от режима он также автоматически загружает файлы с переменными с диска.

Переменные среды в Node.JS

Однако Node.JS по умолчанию этого не делает, и вам необходимо настроить приложение для обработки переменных среды.

В Node.JS вы можете передавать переменные с помощью команды оболочки, например: MY_VARIABLE=x node myapp.js (добавив команду с переменными), и это даст вам process.env.MY_VARIABLE внутри вашего приложения myapp.js. Следуя этому поведению, существует консенсус относительно использования переменной NODE_ENV для настройки режима среды. Для производственного использования вы должны запустить свое приложение, используя NODE_ENV=production node myapp.js, а для разработки NODE_ENV=development node myapp.js. Конечно, если на вашем компьютере уже установлены эти переменные среды (например, в .bash_profile), вам не нужно добавлять к ним команду.

На практике на машинах для разработки эти переменные уже настроены на вашем компьютере, в то время как рабочие машины (например, контейнеры Docker и т. Д.) Запускаются чистыми, и вы передаете переменные среды при запуске приложения. Например, Heroku (и другие службы развертывания) позволяют настраивать переменные среды, которые устанавливаются при запуске компьютера.

Существует также метод хранения переменных в файлах (таких как .env или другие файлы), но те, которые вам нужно будет прочитать с диска при запуске приложения. И тут в игру вступает dotenvconfig package). Что делает dotenv, это читает файл .env, хранящийся в пути выполнения вашего приложения (корень приложения), и устанавливает любые переменные, определенные там, в process.env для использования Node.JS. Это чрезвычайно полезно для машин разработки, но на производстве рекомендуется не иметь файлов, которые хранят конфиденциальную информацию в переменных, а использовать системные переменные среды. Для производственных машин также есть возможность создать или загрузить в машину файл .env во время настройки машины в каталог приложения.

Примечание:

  • никогда не передает .env или файлы конфигурации, которые хранят пароли и конфиденциальную информацию, в ваш репозиторий
  • никогда не хранить разработки и производства переменных в одном файле

Подход дотенв

Лучший способ сделать это - использовать dotenv и иметь разные .env файлы, один на вашем компьютере для разработки и другой на вашем рабочем компьютере. Таким образом, когда ваше приложение запускается, оно читает переменные, которые хранятся в соседнем .env. Это наиболее безопасный и надежный способ при отсутствии средств для передачи переменных среды на рабочий компьютер из приложения / интерфейса управления машиной.

Самый простой способ настроить приложение с помощью dotenv - установить для вашей команды start что-то вроде:

"start": "nodemon --exec \"node -r dotenv/config\" server.js"

и затем в файле .env, хранящемся на вашем локальном компьютере / компьютере для разработки, у вас будет что-то похожее на:

DATABASE_PASSWORD=1235
DATABASE_USERNAME=joe-dev
...

и в файле .env на вашем рабочем компьютере (сервере):

DATABASE_PASSWORD=root@1235
DATABASE_USERNAME=root
...
0 голосов
/ 11 января 2019

согласно моему пониманию Вы не создали и не настроили файл конфигурации и не указали его в своем app.js или любом другом файле. давайте посмотрим, например, создать файл конфигурации

 const config = {
        "development":{
            "host":"localhost",
            "dbport":"27017",
            "port":"",
            "username":"",
            "password":"",
            "userdb":"",
            "passworddb":"123456",
            "authSource":"",   
            "database":"devDB"
},
        "staging":{
            "host":"",
            "dbport":"",
            "port":"",
            "username":"",
            "password":"",
            "passworddb":"@123456",
            "database":"stageDB",
        }, 
        "production":{
            "host":"",
            "dbport":"",
            "port":"",
            "userdb":"",
            "passworddb":"@123456",
            "username":"",
            "password":"",
            "database":"prodDB",
        }

    };
    module.exports = config;

тогда у вас есть переменная в вашем файле .env, например NodeENV = 'prod' затем импортируйте его в свои файлы как

var config = require('./config')["process.env.NodeENV"];

и еще одна последняя вещь, которую dotenv использует только для загрузки переменных среды из файла .env в process.env.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...