使用查询S3 json文件的节点js的lambda函数

时间:2019-02-09 15:46:33

标签: node.js amazon-web-services amazon-s3 aws-lambda

我已将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 });
}`

但仍然为空。

2 个答案:

答案 0 :(得分:1)

我了解您要在这里完成的工作,但这不是正确的方法。

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

以上部分仍将返回一个Promise对象,这意味着您需要相应地处理它。您不想做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函数。如果您想使用Promise,则可以这样做。

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);
                }
            }
        );
    });
}

答案 1 :(得分:0)

执行此操作的另一种方法如下:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

async function readFile(Bucket, Key) {
  const params = {
    Bucket,
    Key,
    ResponseContentType: 'application/json',
  };

  const f = await s3.getObject(params).promise();
  return f.Body.toString('utf-8');
}

readFile('mybucket', 'xyz.json').then(console.log);