【问题标题】:String interpolation on static files served by NodejsNodejs 提供的静态文件的字符串插值
【发布时间】:2020-05-22 10:28:58
【问题描述】:

您好,我有 Nodejs 服务器,它在 /assets/meta-info.json 提供 静态资源,其中包含:

{
  "environmentName": "${ENV_NAME}"
}

问题是:如何将${ENV_NAME}替换为对应的系统环境变量?

【问题讨论】:

    标签: javascript node.js assets string-interpolation


    【解决方案1】:

    您可以将其保存为 /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作为静态资源。
    【解决方案2】:

    您可以在服务器启动时修改文件并请求修改后的文件(或者您可以重命名原始文件并保留原始修改后的文件) 类似于在运行时修改原始文件(这是不可取的,因为您将一次又一次地修改同一个文件)=>

    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 之类的东西,那么我会创建文件的备份副本并就地修改原始文件。

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      相关资源
      最近更新 更多