【问题标题】:(node.js) how to use environment variables in JSON file(node.js) 如何在 JSON 文件中使用环境变量
【发布时间】:2016-05-01 03:01:34
【问题描述】:

我正在使用需要 JSON 配置文件的第 3 方库,并且我需要将一些 env 变量作为键值传递。如果我像往常一样包含它们,例如:

  "s3": {
    "key": process.env.AWS_ACCESS_KEY_ID,
    "secret": process.env.AWS_SECRET_ACCESS_KEY,
    "bucket": process.env.S3_MLL_BUCKET_NAME,
    "destination": "/backups/database",
    "encrypt": false,
    "region": process.env.AWS_REGION
  }

...我收到错误:

SyntaxError: config/s3_backup.config.json: Unexpected token p

【问题讨论】:

标签: node.js


【解决方案1】:

JSON 没有环境变量的概念。您可以做的是将您的配置文件声明为node.js 模块,然后您将能够使用您的环境变量,如下所示:

module.exports = {
  s3: {
    key: process.env.AWS_ACCESS_KEY_ID,
    secret: process.env.AWS_SECRET_ACCESS_KEY,
    bucket: process.env.S3_MLL_BUCKET_NAME,
    destination: "/backups/database",
    encrypt: false,
    region: process.env.AWS_REGION
  }
};

【讨论】:

  • 实际上很容易将它与 JSON 文件的内容结合起来:merge({ }, defaults, config) 其中var config = require('config.json') 例如,如果你有一个好的merge 函数。
  • 我应该更具体一点,当我在 OP 中说我正在使用 3rd 方库时,我必须将它传递给 JSON 文件,我不能使用普通的 js文件并导出配置。我想我可以只生成 JSON 文件作为我的部署脚本的一部分……尽管这违背了使用 env 变量的目的。我会与项目的作者核实,因为这似乎太常见了,没有解决方法。
  • 您可以通过“JSON.stringify()”调用从模块生成 JSON 文件并将其传递给库。
  • 我和 Ben 有同样的问题,“字符串化”js 对象也不起作用。
  • 我也有同样的问题,第三方库会在特定目录中查找json文件。我不能使用mudules来导出或stigify。
【解决方案2】:

我遇到了同样的问题,对我有用的是使用 js 文件并导出对象 module.exports = {config: {"exampleAPIKey":"ruier4343"}}...然后“字符串化”对象,然后将其解析回 json const config = require("./jsConfigs.js").config; const jsonConfig = JSON.parse(JSON.stringify(config)) 我尝试了很多不同的方法,但这是唯一有效的方法。

【讨论】:

    【解决方案3】:

    我遇到了类似的问题,我必须在 config.json 中传递 Env 变量,而我的第 3 方系统主要接受 config.json。

    这是对我有用的解决方法。

    1. 我的 app.js 在 package.json 的启动脚本中执行
    2. 因此,在运行时(即运行命令“npm run start”的部署),它将使用下面放置在 app.js 中的代码(在创建服务器之前)动态更新 config.json。

    App.js

    //updating config.json to use environment variables during run time
    const fs = require('fs');
    const fileName = './public/config.json';
    const file = require(fileName);
    if (file && file.arguments && file.arguments.execute)
        file.arguments.execute.url = process.env.executeUrl || "";
    
    if (file && file.configurationArguments && file.configurationArguments.publish)
        file.configurationArguments.publish.url = process.env.publishUrl || "";
    
    fs.writeFile(fileName, JSON.stringify(file, null, 2), function writeJSON(err) {
        if (err)
            return console.log(err);
        console.log('updated config.json');
    });
    http.createServer(app).listen(app.get('port'), function() {
        console.log('App Express server listening on port ' + app.get('port'));
    });
    

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2021-06-21
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2017-06-12
      • 2020-10-06
      相关资源
      最近更新 更多