как установить и использовать переменные окружения в node.js - PullRequest
0 голосов
/ 17 февраля 2020

, поэтому у меня есть файл .env в моем проекте TypeScript-node. Он содержит переменную сеанса, такую ​​как:

SESSION_SECRET= EXAMPLEkeyHERE1
 BIRD_STRIPE_KEY= TheseAreNotReAlKeYS
CIRC_STRIPE_KEY= XXXXXX1232abc

и импорт с использованием:

import session = require('express-session'); const { SESSION_SECRET, PORT } = process.env;

и мое приложение. js выглядит так:

if (!SESSION_SECRET) {
logger.error('No client secret. Set SESSION_SECRET environment variable.');
process.exit(1);
}

 /**
 * @description Create Express server.
 */
 const app = express();

if (IS_DEVELOPMENT) {
   /**
    * @description Error Handler. Provides full stack - remove for production
    */
 app.use(errorHandler());
 }

 /**
  * @description Express configuration
  */
  app.set('port', PORT || 3000);
  app.use(
   cors(),
   compression(),
   express.json(),
   session({
    secret: SESSION_SECRET,
    resave: true,
    saveUninitialized: false
})
);

/**
 * @description Express routers
 */
const routers = {
     api: express.Router(),
     provider: express.Router()
 };

 routers.api.use([routers.provider]);
 routers.provider.use('/provider', [routes.Bird, routes.Circ, routes.Lime, routes.Spin, routes.Tier]);

/**
 * @description These line will add /api/v{version} route prefix in every api requests.
 */
 app.use(`/api/v${API_CONFIG.versions.v1}`, routers.api);

/**
 * @description These lines are including error404 exported module and it will get called when routes not found.
 */
  app.use([middleware.Error404]);

 /**
 * @var server
 * @description Start Express server.
 */
 app.listen(app.get('port'), () => {
     console.log('App is running at http://localhost:%d in %s mode', app.get('port'), app.get('env'));
      console.log('Press CTRL-C to stop\n');
   }); 

когда я нажимаю npm start, я получаю эту ошибку:

> @ruler-mobility/ruler@1.0.0 serve /Users/macbook/Desktop/develop/rails-projects/ruler
> node src/app.js

 error: No client secret. Set SESSION_SECRET environment variable. {"service":"user-service"}
 npm ERR! code ELIFECYCLE
 npm ERR! errno 1
 npm ERR! @ruler-mobility/ruler@1.0.0 serve: `node src/app.js`
 npm ERR! Exit status 1

, чтобы вы могли видеть, что ошибка регистрируется с первого оператора if в коде. Может также произойти сбой при конфигурации express.

Я попытался установить SESSION_SECRET в виде строки SESSION_SECRET= "EXAMPLEkeyHERE1" в моем файле .env, но это не имело значения. Может кто-нибудь сказать мне, что я делаю не так здесь?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете использовать dotenv для загрузки переменных env:

npm install dotenv -D

и затем как можно скорее в вашем скрипте:

require('dotenv').config()
0 голосов
/ 28 февраля 2020

Мне не ясно, что ваша проблема - чтение файла конфигурации или доступ к переменным среды.

Чтобы получить доступ к переменным среды, вам просто нужно использовать process.env.VARNAME. Это предполагает, что переменная окружения установлена ​​правильно, например,

> SESSION_SECRET="EXAMPLEkeyHERE1" node src/app.js

Но если вы хотите поместить свою конфигурацию в файл, вы можете либо использовать файл .json, который вы require, либо использовать библиотеку управление конфигурацией, например confinode , которая будет искать, загружать и анализировать файл для вас.

...