【问题标题】:How to extract environment variable from process.environment in nodejs如何从nodejs中的process.environment中提取环境变量
【发布时间】:2020-01-12 21:45:30
【问题描述】:

我已在我的虚拟 nodejs 项目中成功集成了条带支付。但是我仍然遇到了一个问题,因为我必须将代码推送到我的 github 存储库,所以我无法继续前进。所以,我通过 npm 安装了 dotenv 包,并创建了一个 .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 存储库。

【问题讨论】:

    标签: node.js dotenv


    【解决方案1】:

    我在这里看到了问题 您需要在主要导入后初始化 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');
    
    

    【讨论】:

    • 好的,那我们试试
    • 你能console.log(process.env.STRIPE_SECRET_KEY)和console.log(process.env)吗?
    • 你能再看看编辑后的答案吗,我在这里看到了问题@AvadheshKumar
    • 我已经安慰 process.env 我的条带键在那里。让我试试这个编辑过的答案。希望它有效
    • 已经被接受了,但我想你之前提到的空间没有问题
    【解决方案2】:

    您必须更改 dotenv npm 的 server.js 文件。 喜欢**require('dotenv').config();** 然后可能是你有导出过程环境。

    module.exports = {
      STRIPE_SECRET_KEY: process.env.STRIPE_SECRET_KEY,
    };
    

    【讨论】:

    • 我不这么认为,因为我已经安慰了 process.env 并且密钥就在那里
    • 你试过在 server.js 文件中导出变量吗?因为没有导出,您将无法访问 process.env 变量
    • 非常感谢兄弟的帮助,但@onuriltan 已经给出了可行的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2018-12-17
    • 2013-03-11
    • 2018-08-08
    • 2014-08-12
    • 2010-10-14
    相关资源
    最近更新 更多