如何将listObjectsV2作为json返回

时间:2019-06-04 13:31:02

标签: node.js express amazon-s3

我正在尝试调用AWS S3存储桶并获取我的图像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]

但是,数组中没有任何内容。如果我手动将一些东西添加到images数组中,例如let images = [1,2,3,4];然后当我转到http://localhost:5001/api/images时,它确实显示了[1,2,3,4],但是上面的代码没有任何作用。

1 个答案:

答案 0 :(得分:0)

最后我解决了,我只需要简单地移动 res.json(images);在else {}关闭之后,所以这是固定代码

IResolutionRoot.Get(typeof(TChanger), new TypedConstructorArgument(typeof(IEnumerable<T>), items));