13

了解到包含 API 密钥是一种不好的做法,我进行了一些研究并尝试学习如何创建自定义process.env.

看完之后:

我正在尝试基于process.env.NODE_ENV. 该应用程序将托管在 Heroku 和我的 .gitignore 上,dev.env 但是当我尝试在dotenv本地使用时,我得到了一个undefined. 我已经export NODE_ENV=development在我的终端中设置了本地环境。当我运行命令npm startnodemon两者都返回undefined但在env.js中我得到Testing for: development,例如:

nodemon

[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
Testing for: development
undefined

这是我所拥有的:

应用程序.js

const keys = require('./config/env')
return console.log(process.env.PORT)

配置/env.js

const env = process.env.NODE_ENV
console.log(`Testing for: ${env}`)
try {
  switch(env) {
    case 'undefined':
      Error('Environment undefined, if local in terminal: export NODE_ENV=development')
      break
    case 'development':
      require('dotenv').config({
        path: './dev.env'
      })
      break
    case 'production':
      require('dotenv').config({
        path: './prod.env'
      })
      break
    default:
      Error('Unrecognized Environment')
  }  
} catch (err) {
  Error('Error trying to run file')
}

配置/dev.env

## Port number to run Application
PORT=4321

但是在app.js中,当我使用return console.log(process.env.PORT)return console.log(keys.PORT)他们都进行测试时undefined,为什么?使用时,我似乎在env.jsdotenv中做错了什么。

为了澄清,我什至还没有推向 Heroku,prod.env将是验证。如果有更好的方法请不吝赐教。

4

5 回答 5

13

在重新阅读有关的文档后,我发现了哪里出了问题path,例如:

require('dotenv').config({ path: '/full/custom/path/to/your/env/vars' })

更改后:

case 'development':
  require('dotenv').config({
    path: './dev.env'
  })
  break

至:

case 'development':
  require('dotenv').config({
    path: `${__dirname}/dev.env`
  })
  break

有用。所以我的错误是范围问题。无需设置const keys,只需使用require('./config/env')我就可以访问任何自定义进程,例如:

process.env.CUSTOM

或者在这种情况下,它将是:

process.env.PORT

来自app.js

于 2019-07-26T17:16:47.880 回答
1

您好,第一次使用switch(env.trim()),然后更改路径值path: './config/dev.env'。祝你好运。

于 2019-07-26T06:01:29.523 回答
0

Heroku 不在 dotenv 上运行。

它在给定 Heroku 应用程序的设置页面中有一个名为“Config Vars”的东西:

例如

Heroku 配置变量

对于您的示例,如果代码想要访问:process.env.NODE_ENV,您将在给定应用程序的 Heroku 设置页面中设置一个新的 Config Var,然后调用它NODE_ENV。设置您想要的值,然后按保存。瞧。完毕。

dotenv 的附加值通常用于在本地机器上进行测试。

于 2019-07-26T09:04:21.913 回答
0

您收到此错误是因为您需要设置这些环境变量,因为我们那里没有 .env 文件,而在开发服务器 dotenv 上使用您的 .env 文件为您设置它。

您需要通过 Web 界面或 heroku CLI 设置这些变量。 这个heroku doc会帮助你。

于 2019-07-26T05:18:10.227 回答
0

如果您看到变量使用echo $varprocess.env.var未定义,请确保export在创建变量时使用该关键字。 export var="value"

于 2022-03-02T11:00:30.483 回答