代码之家  ›  专栏  ›  技术社区  ›  werasquez

Nodejs提供的静态文件的字符串插值

  •  0
  • werasquez  · 技术社区  · 4 年前

    嗨,我有Nodejs服务器 静态资源 /assets/meta-info.json 其包含:

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

    问题是:如何更换 ${ENV_NAME} 是否有相应的系统环境变量?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Gayathri    4 年前

    您可能可以将其另存为/assets/meta-info.js 您可以导入'dotenv'npm库。

    在assets/meta-info.js中

     require('dotenv').config();
    
        module.exports = {
          "environmentName": process.env.ENV_NAME
        }
    

    有一个.env文件(无扩展名)。下面有一行:

    ENV_NAME=prod
    
        2
  •  0
  •   warl0ck    4 年前

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

    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 ,然后我将创建文件的备份副本并就地修改原始文件。