gpt4 book ai didi

node.js - 如何在运行时使用 Node 配置覆盖配置值?

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:30 26 4
gpt4 key购买 nike

我想在测试时覆盖一些值,特别是将 HTTP 服务的重试次数设置为 1(立即失败,不重试)。我们的项目使用 node-config。根据docs我可以用 NODE_CONFIG 环境变量覆盖:

node myapp.js --NODE_CONFIG='{"Customer":{"dbConfig":{"host":"customerdb.prod"}}}'

好吧,我更愿意在我的测试中这样做,但不是对所有测试。 code表示您可以通过设置 ALLOW_CONFIG_MUTATIONS 来允许配置更改。

process.env.ALLOW_CONFIG_MUTATIONS = "true";
const importFresh = require('import-fresh');
importFresh("config");

process.env.NODE_CONFIG = JSON.stringify({httpServices:{integration:{enrich: {retryInterval: 1, retries: 1}}}});
expect(process.env.NODE_CONFIG, 'NODE_CONFIG not set').to.exist();
expect(process.env.NODE_CONFIG, 'NODE_CONFIG not set').to.match(/retryInterval/);
expect(process.env.ALLOW_CONFIG_MUTATIONS, 'ALLOW_CONFIG_MUTATIONS not set').to.equal("true");

const testConfig = require("config");
console.dir(testConfig.get("httpServices.integration.enrich"));
expect(testConfig.get("httpServices.integration.enrich.retryInterval"), 'config value not set to 1').to.equal(1);

结果:

{ url: 'https://internal-**********',
retryInterval: 5000,
retries: 5 }
`Error: config value not set to 1: Expected 5000 to equal specified value: 1`

如何让这个覆盖生效?

(预计来自Hapi.js代码库)

最佳答案

我是 node-config 的维护者之一。你的错误是你第二次使用 require 而你应该再次使用 importFresh

您第一次使用“importFresh()”与require() 没有什么不同,因为这是第一次使用require()

设置一些变量后,调用require(),它将返回已经生成和缓存的config副本,忽略环境变量设置的影响。

您只需要使用一次 importFresh(),而您当前使用的是 require()。如您所料,这将导致返回配置对象的“全新”副本。

关于node.js - 如何在运行时使用 Node 配置覆盖配置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46369745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com