错误:configuration文件丢失 – /nodeapp/node_modules/aws-sdk/lib/request.js:31

我从AWS-SDK中使用s3.listObjects()函数拉对象,并且不断收到以下错误:

 /nodeapp/node_modules/aws-sdk/lib/request.js:31 

其次是

 Error: Missing credentials in config at IncomingMessage.<anonymous> (/nodeapp/node_modules/aws-sdk/lib/util.js:863:34) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:186:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickDomainCallback (internal/process/next_tick.js:122:9) 

这不加起来,因为我有一个不同的路线(downloadParam),从S3中检索一个对象,而不会给我这个错误。 此外,当我注销从downloadResults路由检索到的对象,似乎检索对象没有问题,但我仍然会得到这个错误。

我花了几个小时在这个问题上,我似乎无法弄清楚为什么会发生这种情况。 我已经粘贴了两条路线的代码,一个是有效的,另一个是没有的。 从我在线收集的信息来看,这看起来更像是一个代码问题,而不是AWS-SDK的凭证问题。

  downloadParam: function(app, s3){ app.use('/api', apiRoutes) apiRoutes.get('/download-param-file', function(req, res, next){ res.set({'Content-Type':'text/csv'}) s3.getObject({Bucket: 'some-bucket', Key: 'some-key' + req.query.fileName}, function(err, file){ if (err) { console.log(err); return next(err); } else { return res.send(file.Body.toString()); } }) }) }, downloadResults: function(app, s3){ app.use('/api', apiRoutes) apiRoutes.get('/download-results-file', function(req, res, next){ res.set({'Content-type': 'application/zip'}) var params = { Bucket: 'some-bucket', Delimiter: '/', Prefix: 'some-key' }; var filesArray = [] var files = s3.listObjects(params).createReadStream() var xml = new XmlStream(files) xml.collect('Key') xml.on('endElement: Key', function(item) { filesArray.push(item['$text'].substr(params.Prefix.length)) }) xml.on('end', function() { res.send(zip(filesArray, req.query.jobName, params)) }) }) } 

截至目前downloadParams按预期工作,但downloadResults不符合。 任何帮助将非常感激。

这个链接似乎解决了类似于我的问题

你没有authentication这个电话。 该存储桶没有权限列出没有身份validation的对象,而它有权限下载特定的文件而无需身份validation。

请参阅Amazon文档,了解如何将凭据安全地添加到实例。

从本质上讲,

 var creds = AWS.Credentials(); creds.accessKeyId = 'AKIAIOSFODNN7EXAMPLE'; creds.secretAccessKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; AWS.config.credentials = creds;