Node js表达项目如何添加环境变量

时间:2019-01-11 06:44:07

标签: node.js express

我是一名Java脚本全栈开发人员。 在vue js中,我在根目录中创建了两个文件。

  1. 环境发展
  2. 环境生产

在我的main.js文件中,我可以访问像这样的环境变量

process.env.VUE_APP_MY_VARIABLE_X

vue js的生产和开发有何不同, 如果我使用 npm run serve 项目加载了开发环境变量。如果我使用 npm run build ,它将使用生产环境变量。就这些了。<​​/ p>

但是在我的expressjs项目中,

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

此命令将始终负责运行项目。我找不到Vue中的两个命令。我看过每个人说的教程都使用名为 dotenv 的软件包。

我不知道这个软件包如何识别生产环境和开发环境。

最后,我想在本地计算机上将数据库密码设置为123456,在服务器中将root设置为root @ 123456。我该如何实现?

2 个答案:

答案 0 :(得分:3)

Vue.js根据命令自动处理模式(例如serve设置NODE_ENV=development,而build设置NODE_ENV=production)。 根据模式的不同,它还会自动从磁盘加载带有变量的文件。

Node.JS中的环境变量

但是,Node.JS在默认情况下不会执行此操作,因此您必须设置应用程序来处理环境变量。

在Node.JS中,您可以通过shell命令传递变量,例如: 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或其他文件)中存储变量的方法,但是在应用程序启动时必须从磁盘读取变量。 这就是dotenv(和config包)开始发挥作用的地方。 dotenv的作用是读取存储在应用程序执行路径(应用程序的根目录)中的.env文件,并将其中定义的任何变量设置到process.env中供Node.JS使用。 这对于开发机非常有用,但是在生产环境中,建议不要使用将敏感信息存储在变量中的文件,而应使用系统环境变量。 对于生产机器,还可以选择在机器设置时将.env文件构建或加载到机器中的app目录中。

注意:

  • 切勿将存储密码和敏感信息的.env或配置文件提交到存储库中
  • 永远不要将 development production 变量存储在同一文件中

dotenv方法

最好的解决方法是使用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
...

答案 1 :(得分:0)

根据我的理解 您尚未创建和设置配置文件,而在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。