Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在AWS中查询S3JSON文件_Node.js_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Node.js 在AWS中查询S3JSON文件

Node.js 在AWS中查询S3JSON文件,node.js,amazon-web-services,amazon-s3,aws-lambda,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 con

我已将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});
}`
上面的部分仍然会返回一个promise对象,这意味着您需要相应地处理它。而不是
const response=getS3Objects(bucket,objectKey)你想做什么

getS3Objects(bucket,objectKey).then(response => console.log(response));
处理程序
函数内部

此外,您使用的
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);
                }
            }
        );
    });
}

另一种方法是:

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

感谢您的评论,但是响应仍然为null,我不知道为什么??如果我想通过2次过滤来获得处理程序中的结果,该怎么办?var params={“Bucket”:Bucket,“Key”:Key}s3.getObject(params,function(err,data){if(err)console.log(err,err.stack);//在其他地方发生错误{console.log(data);var json=json.parse(newbuffer(data.Body).toString(“utf8”);从json s中选择*,其中s.hotelID=filter.ID和s.targetDay=filter.date//var json=json.stringify(data.Body);console.log(json);//console.log(json.find(filter));});请注意,您也可以将处理程序设置为异步函数,在这种情况下,在调用
readFile
时也可以使用
async/await
语法。