不断出错:未定义配置属性“ vidly_jwtPrivateKey”

时间:2019-07-31 19:56:49

标签: node.js express environment-variables config

Error Screenshot [我正在使用Node.js,并且已经设置了环境变量vidly_jwtPrivateKey。并尝试使用此命令config.get('vidly_jwtPrivateKey')使用配置包检索它,但我一直收到此错误:

  

抛出新的错误(“配置属性“'+属性+'”不是   定义');错误:配置属性“ vidly_jwtPrivateKey”不是   定义,

我已经搜寻了几个小时,请您提出解决方案。

这是我的default.json文件包含的内容:

{
    "jwtPrivateKey" : ""
}

和custom-environment-variables.json包含:

{
    "jwtPrivateKey" : "vidly_jwtPrivateKey"
}

并且我已经通过在终端中导出vidly_jwtPrivateKey来设置(我使用Mac):

export vidly_jwtPrivateKey=mySecureKey.

我已经尝试过了,但是没有用:

  

Error: Configuration property "mongoURI" is not defined

以下是我用来检索环境变量的代码:

if (!config.get('vidly_jwtPrivateKey')){
  console.error('FATAL ERROR : jwtPrivateKey is not defined '),
  process.exit(1);
};

非常感谢

5 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,这是因为Visual Studio和Visual Studio代码中集成了终端,看来除非您在Admin模式下运行编辑器,否则他们似乎无法访问任何这些变量。这个问题,您只需要以Amin模式启动编辑器

P.S:我在答案上看到的是不正确的,因为如果将其更改为

,实际上您不再从环境变量中读取它。
config.get('jwtPrivateKey')

我知道此代码与哪个教程有关。所以应该是

config.get('vidly_jwtPrivateKey')

您应该改为在ADMIN模式下运行编辑器

答案 1 :(得分:0)

您尝试通过以下方式获取值而不是键名:

config.get('vidly_jwtPrivateKey')

应该是

config.get('jwtPrivateKey')

答案 2 :(得分:0)

我遇到了同样的问题,并且试图调试它持续了数小时。我认为,您应该完全转向使用dotenv NPM软件包。 当存储任何类型的秘密时,这是一种轻巧且更好的解决方案。 您只需要使用

require('dotenv').config()

或通过在CLI中键入

node -r dotenv/config your_script.js

两个工作都很棒。

然后,只需将令牌保存为.env文件为

RANDOM_SECRET_TOKEN = someRandomSecretIDon'tcareAbout

您可以使用任何您想用作秘密的东西

最后,在整个环境中使用[p>

process.env.RANDOM_SECRET_TOKEN

在这种情况下,它的使用是这样的:

jwt.sign({_id : this._id}, process.env.RANDOM_ACCESS_TOKEN)

相信我,使用config仅在更改环境时更改某些变量的配置才有意义(例如,开发=>测试=>生产)。 对于存储秘密,dotenv软件包更容易,更好

答案 3 :(得分:0)

我遇到了同样的问题,根据配置包https://www.npmjs.com/package/config的官方文档,您应该使用config.has()来测试是否定义了配置值。 config.get()会为未定义的键引发异常,以帮助捕获错别字和遗漏

const config = require('config');
//...
 
if(!config.has('jwtPrivateKey')){
  console.error('FATAL ERROR: jwtPrivateKey is not defined');
  process.exit(1);
}

答案 4 :(得分:0)

{
  "jwtPrivateKey" : "vidly_jwtPrivateKey"
}

if (!config.get('vidly_jwtPrivateKey')) {
  // use config.get('jwtPrivateKey')
};

在您的代码中,尝试对值而不是键调用 get