Node.js 如何将listObjectsV2作为json返回

Node.js 如何将listObjectsV2作为json返回,node.js,express,amazon-s3,Node.js,Express,Amazon S3,我试图调用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

我试图调用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,例如 [


但是数组中没有填充任何内容。如果我手动将内容添加到images数组中,比如让images=[1,2,3,4];那么当我转到它时,确实会显示[1,2,3,4],但是上面的代码不起作用。

我最终解决了这个问题,我只需移动 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);

});  

我最终解决了,我只需移动 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);

});  

您是否正确获取了照片.Key?您还可以使用一个简单的
forEach
而不是
map
函数Hey@DragonBorn,是的,我是。这就是数据。Contents返回:Contents:[{Key:'aws.png',LastModified:2019-06-04T09:55:27.000Z,ETag:''74D4D4C1E312C30CD029EE7D10620C9B66'“,大小:18156,StorageClass:'标准'},{Key:'图像/',最后修改:2019-06-04T09:55:11.000Z,ETag:'d41d8cd98f00b204e9800998ecf8427e',大小:0,StorageClass:'标准'}];你能
console.log
将项目放入图像数组后,在循环外部检查它吗。嘿@DragonBorn,我解决了,我只需移动res.json(图像);就在关闭else之后{}您是否正确获取了照片.Key?您还可以使用一个简单的
forEach
而不是
map
函数Hey@DragonBorn,是的,我是。这就是数据。Contents返回:Contents:[{Key:'aws.png',LastModified:2019-06-04T09:55:27.000Z,ETag:''74D4D4C1E312C30CD029EE7D10620C9B66'“,大小:18156,StorageClass:'标准'},{Key:'图像/',最后修改:2019-06-04T09:55:11.000Z,ETag:'d41d8cd98f00b204e9800998ecf8427e',大小:0,StorageClass:'标准'}];你能
console.log
将项目放入图像数组后,在循环外部检查它吗。嘿@DragonBorn,我解决了,我只需移动res.json(图像);就在关闭else之后{}