我使用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
没有。任何帮助将非常感激。
答案 0 :(得分:3)
您未对来电进行身份验证。存储桶没有权限在没有身份验证的情况下列出对象,而它有权下载特定文件而无需身份验证。
有关向实例添加凭据Amazon Documentation的信息,请参阅safely。
基本上,
var creds = AWS.Credentials();
creds.accessKeyId = 'AKIAIOSFODNN7EXAMPLE';
creds.secretAccessKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';
AWS.config.credentials = creds;