【发布时间】:2020-05-22 10:28:58
【问题描述】:
您好,我有 Nodejs 服务器,它在 /assets/meta-info.json 提供 静态资源,其中包含:
{
"environmentName": "${ENV_NAME}"
}
问题是:如何将${ENV_NAME}替换为对应的系统环境变量?
【问题讨论】:
标签: javascript node.js assets string-interpolation
您好,我有 Nodejs 服务器,它在 /assets/meta-info.json 提供 静态资源,其中包含:
{
"environmentName": "${ENV_NAME}"
}
问题是:如何将${ENV_NAME}替换为对应的系统环境变量?
【问题讨论】:
标签: javascript node.js assets string-interpolation
您可以将其保存为 /assets/meta-info.js 您可以导入 'dotenv' npm 库。
在 assets/meta-info.js 中
require('dotenv').config();
module.exports = {
"environmentName": process.env.ENV_NAME
}
有一个 .env 文件(无扩展名)。下面有一行:
ENV_NAME=prod
【讨论】:
json作为静态资源。
您可以在服务器启动时修改文件并请求修改后的文件(或者您可以重命名原始文件并保留原始修改后的文件) 类似于在运行时修改原始文件(这是不可取的,因为您将一次又一次地修改同一个文件)=>
const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
let fileBuffer = fs.readFileSync('./manifest.json', 'utf-8');
fileBuffer = fileBuffer.replace('${ENV_NAME}', process.env.NODE_ENV);
fs.writeFileSync('./temp.json', fileBuffer);
res.sendFile(path.join(__dirname, './temp.json'));
});
app.listen(4000, () => {
console.log('listening and working');
});
改为修改一次并发送修改后的副本。
let fileBuffer = fs.readFileSync('./manifest.json', 'utf-8');
fileBuffer = fileBuffer.replace('${ENV_NAME}', process.env.NODE_ENV);
fs.writeFileSync('./temp.json', fileBuffer);
const app = express();
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, './temp.json'));
});
现在如果您使用express.serveStatic 之类的东西,那么我会创建文件的备份副本并就地修改原始文件。
【讨论】: