2017-03-05 35 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)。 –

相關問題