Как извлечь переменную среды из process.environment в nodejs

Я успешно интегрировал страйп-платежи в свой фиктивный проект nodejs. Но все же у меня осталась проблема, которая не позволяет мне двигаться вперед, поскольку мне нужно отправить код в мой репозиторий github. Итак, я установил пакет dotenv через npm и создал файл .env для хранения секретного ключа полосы. Если я извлекаю секретный ключ полосы с помощью process.env.STRIPE_SECRET_KEY, платеж завершается неудачно, но если я передаю STRIPE_SECRET_KEY напрямую, платеж проходит успешно.

Я даже утешил process.env, и он показывает мой секретный ключ полосы.

Это мой файл server.js:

const express = require('express');
const bodyParser = require('body-parser');
const dotenv = require('dotenv');
const cors = require('cors');

const payments = require('./routes/api/payment');

dotenv.config();

const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(cors())

app.use('/api/payments', payments);

app.get('/', (req, res) => res.send('hello'));

const port = process.env.PORT || 3001;

app.listen(port, () => console.log(`server running on port: ${port}`));

Это мой файл payment.js:

const express = require('express');
const stripe = require('stripe') (process.env.STRIPE_SECRET_KEY); // this 
                                                       gives network error
const stripe = require('stripe') ("sk_test_O5le6FijZU4KcoxE4"); // this 
                                                           works gracefully
const router = express.Router();

router.get('/', (req, res) => {
  res.json({
   message: 'Payment gateway works',
   time: Date.now
  });
})

router.post('/', (req, res) => {
  const credentials = {
  source: req.body.token.id,
  amount: req.body.amount,
  currency: "usd",
  description: req.body.description
}

stripe.charges.create(credentials, (err, response) => {
  if (err) {
  return res.status(400).json({ message: err })
   }
  return res.status(200).json({ message: response })
  })

  })

module.exports = router;

Это мой файл .env:

STRIPE_SECRET_KEY = sk_test_O5le6FijZU4KcoxE4

прямая передача секретного ключа полосы в полосу работает, но это не работает, если я предоставляю секретный ключ полосы, используя process.env.STRIPE_SECRET_KEY. Я хочу, чтобы process.env.STRIPE_SECRET_KEY работал так, чтобы я мог безопасно и надежно отправлять код в свой репозиторий github.


person Community    schedule 11.09.2019    source источник


Ответы (2)


Я вижу проблему здесь. Вам нужно инициализировать dontenv после основного импорта!

const express = require('express');
const dotenv = require('dotenv');
const bodyParser = require('body-parser');
const cors = require('cors');

dotenv.config(); // here after main imports

// After dotenv.config() payment.js will have dontenv values!!
const payments = require('./routes/api/payment');

person onuriltan    schedule 11.09.2019
comment
Хорошо, тогда давайте попробуем - person ; 11.09.2019
comment
Можете ли вы использовать console.log(process.env. STRIPE_SECRET_KEY) и console.log(process.env)? - person onuriltan; 11.09.2019
comment
Можете ли вы еще раз посмотреть отредактированный ответ, я вижу здесь проблему @AvadheshKumar - person onuriltan; 11.09.2019
comment
Я утешил process.env, там присутствует мой страйп-ключ. Позвольте мне попробовать этот отредактированный ответ. Надеюсь, что это работает - person ; 11.09.2019
comment
уже принято, чувак, но я думаю, что нет проблем с местом, как ты упомянул ранее - person Deepankar Singh; 11.09.2019
comment
Я был тем, кто задал этот вопрос, но от другого аккаунта. За это вы получили 2 плюса - person Deepankar Singh; 11.09.2019

Вы должны изменить файл server.js для dotenv npm. Как и **require('dotenv').config();**, после этого у вас может быть процесс экспорта env.

module.exports = {
  STRIPE_SECRET_KEY: process.env.STRIPE_SECRET_KEY,
};
person Pragnesh Panchal    schedule 11.09.2019
comment
Я так не думаю, потому что я консолью process.env и ключ присутствует там - person ; 11.09.2019
comment
Вы пробовали экспортировать переменную в файл server.js? потому что без экспорта вы не можете получить доступ к переменной process.env - person Pragnesh Panchal; 11.09.2019
comment
Большое спасибо, братан, за помощь, но @onuriltan уже дал рабочее решение. - person ; 11.09.2019