Как вернуть listObjectsV2 как json - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь вызвать AWS S3 Bucket и получить свой список URL-адресов изображений, но он не извлекает его.

Я использую Express для внутреннего интерфейса и React для внешнего интерфейса.Когда я вручную ввожу статические данные для массива JSON, он отображается на сервере.Я использую listObjectsV2 для получения списка

const express = require('express');
const app = express(); 
const aws = require('aws-sdk');

const s3 = new aws.S3({
    accessKeyId: "secretId",
    secretAccessKey: "secretKey",
    region : 'eu-west-2',
    Bucket: 'my-aws-bucket'
});

let params = {
    Bucket: "my-aws-bucket", 
    MaxKeys: 6
};

app.get('/api/images', (req, res) => {
    let images = [];


s3.listObjectsV2(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else { 

        var href = this.request.httpRequest.endpoint.href;
        var bucketUrl = href + "my-aws-bucket" + '/';

        data.Contents.map(function(photo) { 
            var photoKey = photo.Key;
            var photoUrl = bucketUrl + encodeURIComponent(photoKey);
            images.push(photoUrl);
        }); 
    }
});  

res.json(images);

});

const port = 5001; 
app.listen(port, () => console.log(`Server is on port: ${port}`));

Я ожидал, что пустой массив моих изображений, который я объявил заполненным URL-адресом изображения, например [https://s3.eu -west-2.amazonaws.com/my-aws-bucket/images/image1.png,https://s3.eu-west-2.amazonaws.com/my-aws-bucket/images/image2.png]

Однако ничего не происходитзаполнены в массиве.Если я вручную добавлю материал в массив изображений, например let images = [1,2,3,4];затем, когда я перехожу к http://localhost:5001/api/images, он показывает [1,2,3,4], но ничего с кодом выше не должно работать.

1 Ответ

0 голосов
/ 04 июня 2019

В конце концов, я разобрался с этим, мне просто нужно было переместить res.json (images);сразу после закрытия else {}, так что это фиксированный код

s3.listObjectsV2(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else { 
    var href = this.request.httpRequest.endpoint.href;
    var bucketUrl = href + "my-aws-bucket" + '/';

    data.Contents.map(function(photo) { 
        var photoKey = photo.Key;
        var photoUrl = bucketUrl + encodeURIComponent(photoKey);
        images.push(photoUrl);
    }); 
   }
   res.json(images);

});  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...