最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用节点lambda函数JS该查询S3 JSON文件

运维笔记admin13浏览0评论

使用节点lambda函数JS该查询S3 JSON文件

使用节点lambda函数JS该查询S3 JSON文件

我已经JSON文件上传到S3,然后我写了下面的代码,看看这个文件里面的内容

const aws = require('aws-sdk');
const s3 = new aws.S3();
const bucket = 'hotels.mserver.online';
const objectKey = 'hotelsrates.json';

exports.handler = (event,context,callback) => {
    // TODO implement

    const response = getS3Objects(bucket,objectKey); //s3.listObjectsV2({}).promise();
    console.log(response);
};

function getS3Objects(bucket,key) {
    return s3.getObject({ Bucket:bucket, Key:key, ResponseContentType:'application/json '})
        .promise().then(file => { return file })
        .catch(error => { return error });
}`

但仍然得到了空。

回答如下:

我了解你们怎么在这里完成,但就是不这样做的正确方法。

function getS3Objects(bucket,key){
    return s3.getObject({Bucket:bucket,Key:key,ResponseContentType:'application/json'})
               .promise().then(file=>{return file})
               .catch(error =>{return error});
}`

以上部分仍然会返回一个承诺的对象,这意味着你需要相应地处理它。取而代之的const response = getS3Objects(bucket,objectKey);你想做的事

getS3Objects(bucket,objectKey).then(response => console.log(response));

里面你handler功能。

此外,您s3.getObject功能的使用是不正确。其中第一个参数是一个对象 - 参数,第二个参数是一个回调函数。

s3.getObject(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);

因此,在你的情况,你要修改getS3Objects起作用的位。如果你想使用的承诺,那么你可以不喜欢这样。

function getS3Objects(bucket, key) {
    return new Promise((resolve, reject) => {
        s3.getObject(
            {
                Bucket: bucket,
                Key: key,
                ResponseContentType: 'application/json'
            },
            (err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            }
        );
    });
}
发布评论

评论列表(0)

  1. 暂无评论