Javascript Heroku S3配置中缺少凭据,如果使用AWS_config_文件,请将AWS_SDK_LOAD_config=1';,

Javascript Heroku S3配置中缺少凭据,如果使用AWS_config_文件,请将AWS_SDK_LOAD_config=1';,,javascript,node.js,heroku,amazon-s3,Javascript,Node.js,Heroku,Amazon S3,我通过S3向heroku上传图像时遇到问题。我在本地没有,但当我在heroku时,我有这个问题。我怀疑这些信条是错误的,但它在localhost中起作用。是否缺少某些内容或我应该添加一些代码 2020-06-17T16:26:58.525066+00:00 app[web.1]: Error: connect ECONNREFUSED 169.254.169.254:80 2020-06-17T16:26:58.525075+00:00 app[web.1]: at TCPConnectWrap

我通过S3向heroku上传图像时遇到问题。我在本地没有,但当我在heroku时,我有这个问题。我怀疑这些信条是错误的,但它在localhost中起作用。是否缺少某些内容或我应该添加一些代码

2020-06-17T16:26:58.525066+00:00 app[web.1]: Error: connect ECONNREFUSED 169.254.169.254:80
2020-06-17T16:26:58.525075+00:00 app[web.1]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
2020-06-17T16:26:58.525076+00:00 app[web.1]: message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
2020-06-17T16:26:58.525077+00:00 app[web.1]: errno: 'ECONNREFUSED',
2020-06-17T16:26:58.525077+00:00 app[web.1]: code: 'CredentialsError',
2020-06-17T16:26:58.525078+00:00 app[web.1]: syscall: 'connect',
2020-06-17T16:26:58.525078+00:00 app[web.1]: address: '169.254.169.254',
2020-06-17T16:26:58.525079+00:00 app[web.1]: port: 80,
2020-06-17T16:26:58.525079+00:00 app[web.1]: time: 2020-06-17T16:26:58.517Z,
2020-06-17T16:26:58.525080+00:00 app[web.1]: originalError: {
2020-06-17T16:26:58.525081+00:00 app[web.1]: message: 'Could not load credentials from any providers',
这是我的密码。它在本地运行良好,但在heroku不起作用

const aws = require('aws-sdk');
const fs = require('fs');

aws.config.update({
  secretAccessKey: process.env.AWS_SECRET_KEY,
  accessKeyId: process.env.AWS_ACCESS_KEY,
  region: process.env.AWS_REGION
});


var s3 = new aws.S3({
  secretAccessKey: process.env.AWS_SECRET_KEY,
  accessKeyId: process.env.AWS_ACCESS_KEY,
  region: process.env.AWS_REGION
});

async function addFile(fullpath = String,key = String) {

  const fileContent = fs.readFileSync(fullpath);

  var params = {
    Bucket: 'bucketeer-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    Key: fullpath,
    Body: fileContent

  };

  return new Promise(function (resolve, reject) {
    s3.putObject(params, function (err, data) {
      if (err) {
        console.log(err, err.stack);
        reject(err);
      } // error
      else {
        console.log("added");
        resolve(data);
      }              // deleted
    });
  });


}

module.exports.addFile = addFile;

请帮我处理这件事

您可能是对的,凭证丢失了。如果您在本地运行的代码中通过
process.env
访问环境变量,那么您还必须为在Heroku中运行的应用程序实例定义它们

在Heroku上,它们被称为“配置变量”,您可以通过Heroku CLI或仪表板GUI来管理它们。在这里,您可以在GUI中找到它,但也值得一看


谢谢您的支持。我在仪表板中的Icheck找到了与本地配置相同的配置。bucketer\u AWS\u ACCESS\u KEY\u ID//bucketer\u AWS\u REGION//bucketer\u AWS\u SECRET\u ACCESS\u KEY//bucketer\u BUCKET\u name无论您在这些配置变量中定义什么,都将是注入
process.env
的值,因此,如果您的代码依赖于
process.env.AWS\u SECRET\u KEY
,那么在Heroku中,您应该拥有完全相同的配置变量。运行时不知道Bucketer\u是什么,因此您的凭据解析为
未定义的
您的意思是,如果配置变量中有Bucketer\u AWS\u SECRET\u ACCESS\u KEY,那么在编码过程中应该是相同的。env.bucketer\u AWS\u SECRET\u ACCESS\u KEYYep,这是正确的
process.env
只是一个普通的对象,没有什么魔力。在Heroku上运行进程时,该对象的值来自配置变量,因此需要确保所有键都匹配。我现在正在上传新代码,到时候会给你回复。但是为什么在本地,我在我的代码process.env.AWS_SECRET_KEY和.env文件bucketer_AWS_SECRET_ACCESS_KEY中都有,而且可以工作呢