如何解决无法为产品和开发环境分别设置环境变量
我的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文件。