Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在本地运行应用程序时下载或设置Heroku应用程序配置变量_Node.js_Heroku_Heroku Cli - Fatal编程技术网

Node.js 在本地运行应用程序时下载或设置Heroku应用程序配置变量

Node.js 在本地运行应用程序时下载或设置Heroku应用程序配置变量,node.js,heroku,heroku-cli,Node.js,Heroku,Heroku Cli,我有一个从GitHub下载的应用程序,在推送到Heroku后,它运行得非常好。但是,当我使用heroku local命令在本地运行它时,它会抛出一个关于缺少配置变量的错误 如何将这些配置文件下载到本地文件夹中(我是否需要)?我是否需要手动创建.env文件才能使其正常工作 以下是应用程序: const assert = require('assert'); const Provider = require('oidc-provider'); assert(process.env.HEROKU_A

我有一个从GitHub下载的应用程序,在推送到Heroku后,它运行得非常好。但是,当我使用
heroku local
命令在本地运行它时,它会抛出一个关于缺少配置变量的错误

如何将这些配置文件下载到本地文件夹中(我是否需要)?我是否需要手动创建
.env
文件才能使其正常工作

以下是应用程序:

const assert = require('assert');
const Provider = require('oidc-provider');

assert(process.env.HEROKU_APP_NAME, 'process.env.HEROKU_APP_NAME missing');
assert(process.env.PORT, 'process.env.PORT missing');
assert(process.env.SECURE_KEY, 'process.env.SECURE_KEY missing, run `heroku addons:create securekey`');
assert.equal(process.env.SECURE_KEY.split(',').length, 2, 'process.env.SECURE_KEY format invalid');

// new Provider instance with no extra configuration, will run in default, just needs the issuer
// identifier, uses data from runtime-dyno-metadata heroku here
const oidc = new Provider(`https://${process.env.HEROKU_APP_NAME}.herokuapp.com`, {
  clients: [
    {
      client_id: 'foo',
      redirect_uris: ['https://jwt.io'], // using jwt.io as redirect_uri to show the ID Token contents
      response_types: ['id_token'],
      grant_types: ['implicit'],
      token_endpoint_auth_method: 'none',
    },
  ],
  cookies: {
    keys: process.env.SECURE_KEY.split(','),
  },
});

// Heroku has a proxy in front that terminates ssl, you should trust the proxy.
oidc.proxy = true;

// listen on the heroku generated port
oidc.listen(process.env.PORT);
下面是我运行“heroku local”时遇到的错误:

3:44:57上午web.1 | assert.js:383
凌晨3:44:57 web.1 |出错;
凌晨3:44:57万维网1 |^
凌晨3:44:57 web.1 |断言错误[ERR_ASSERTION]:process.env.HEROKU_APP_名称缺失
凌晨3:44:57 web.1 |目标。(C:\Users\hmffa\Desktop\my provider\src\index.js:4:1)
上午3:44:57 web.1 | at模块编译(internal/modules/cjs/loader.js:1063:30)
凌晨3:44:57 web.1 | at Object.Module._extensions..js(internal/modules/cjs/loader.js:1092:10)
凌晨3:44:57 web.1 | at Module.load(internal/modules/cjs/loader.js:928:32)
凌晨3:44:57 web.1 | at Function.Module._load(internal/modules/cjs/loader.js:769:14)
凌晨3:44:57 web.1 |在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:72:12)
上午3:44:57 web.1 |在内部/main/run|u main_模块。js:17:47{
凌晨3:44:57 web.1 |生成消息:false,
凌晨3:44:57 web.1 |代码:“错误断言”,
凌晨3:44:57 web.1 |实际:未定义,
凌晨3:44:57 web.1 |预期:正确,
凌晨3:44:57 web.1 |操作员:'='
凌晨3:44:57万维网
[完成]使用信号SIGINT终止所有进程
凌晨3:44:57 web.1退出,退出代码为空

这些变量通常因环境而异。有些东西,比如数据库连接字符串和安全密钥,在本地和生产环境中应该是不同的

然而,Heroku:

有时,您可能希望在本地和Heroku环境中使用相同的配置变量。对于要添加到
.env
文件中的每个配置变量,请使用以下命令:

heroku config:get CONFIG-VAR-NAME -s  >> .env
不要将
.env
文件提交给源代码管理。它只能用于本地配置。更新
.gitignore
文件以排除
.env
文件

请注意,
.env
文件并不神奇。Node.js不会使用开箱即用的值


如果您(看起来是这样)应该会发现您的
.env
文件被使用了。如果您以另一种方式运行它,您可能需要做额外的工作,例如添加。

谢谢Chris的回答。实际上,在使用您提到的命令将配置变量添加到“.env”文件之后,Heroku没有正确读取输入。我发现它使用UTF-16 LE编码创建了.env文件。我把它改成UTF-8,它成功了。人力资源管理,这很奇怪。我想知道这是否与你的贝壳有关?还是
.env
文件已经存在?无论如何,我很高兴你能让它工作。我使用的是Windows PowerShell,而不是Linux操作系统。也许这就是问题的根源。不,我没有
.env
文件
heroku config:get CONFIG-VAR-NAME -s  >> .env