2017-03-05 33 views
1

我拉着使用s3.listObjects()函数从AWS-SDK对象,我不断收到以下错误:错误:在配置缺少凭据 - /nodeapp/node_modules/aws-sdk/lib/request.js:31

/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) 

这并不加起来因为我有检索来自S3对象没有给我这个错误了不同的路线(downloadParam)。此外,当我注销从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没有。任何帮助将非常感激。

This link seems solve an issue similar to mine

+0

凡定义apiRoutes? –

+0

在我routes.js的顶端文件@JoachimBrandonLeBlanc – Mihado

回答

2

你不是验证呼叫。存储桶没有权限无需身份验证即可列出对象,但它具有下载特定文件而无需身份验证的权限。

Amazon Documentation上添加凭据safely的实例。

从本质上讲,

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

AWS.config.credentials = creds; 
+0

我增加了我的桶受让人“每个人”的权限列表和上传/删除。仍然没有运气。还有什么建议? – Mihado

+0

我已经通过使用aws-config对我的server.js中的调用进行了身份验证。我错过了什么? '常量S3 =新AWS.S3(awsConfig({ accessKeyId:process.env.AWS_ACCESS_KEY, secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY, 区域:process.env.AWS_REGION, apiVersion: '2006-03-01'} ) );' – Mihado

+0

awsConfig函数是什么? [S3构造函数接受一个对象](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html)。 –

相关问题