无法为产品和开发环境分别设置环境变量

问题描述

我的Node.js项目具有如下所示的环境文件设置

let config = {
  apiVersion: "/api/v1",PORT: 3001,mongodb: {
    url: "mongodb://localhost:27017/BTracker",},};

module.exports = { config: config };

在部署应用程序时,我需要根据Prod URL更改mongodb url和port字段。 如何根据环境更改这些变量?

这是我的index.js的代码段

let { config } = require("./app/config/appConfig");
app.listen(config.PORT,() => {
  mongoose.connect(config.mongodb.url,{ useMongoClient: true });
  console.log("App is listening on " + config.PORT);
});

解决方法

设置用于配置的环境变量

process.env.PORT = process.env.PORT || 3001;
process.env.NODE_ENV = process.env.NODE_ENV || 'dev'; 

let urlDB;
if (process.env.NODE_ENV === 'dev') {
    urlDB = 'mongodb://localhost:27017/BTracker'
} else {
    urlDB = process.env.MONGO_URI;
}
process.env.URLDB = urlDB;

以及您的索引

require('./app/config/appConfig')
mongoose.connect(process.env.URLDB,{ useNewUrlParser: true,useCreateIndex: true },(err,res) => {
    console.log(process.env.URLDB);
    if (err) throw err;
    console.log();
});

app.listen(process.env.PORT,() => {
    console.log(App is listening on,process.env.PORT));
})
,

首先创建2个<?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="8dp"> <TextView android:id="@+id/text_view_albums" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> </androidx.cardview.widget.CardView> 文件,在其中存储所有配置并将其保存在index.js级别,并确保未将其添加到git存储库中,一个用于开发,另一个用于生产。 用于开发的示例.env文件:

.env

然后在index.js中加载该环境文件。您可以使用dotenv包来做到这一点。 加载环境文件的代码。 index.js的第一行应为:

#ENVIRONMENT
ENV="DEVELOPMENT"
#URI
MONGO_URI="mongodb://localhost:27017/BTracker"

然后您可以使用

从env文件中读取所有密钥
require('dotenv').config();

对于您的代码,您可以使用以下代码:

const enviromentValue = process.env[KEY_VALUE]; 

这将设置let urlDB = process.env.MONGO_URI; 的值。无论您是在生产环境中还是在开发环境中,都需要根据您的设置更改.env文件。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...