Node.js 在AWS中查询S3JSON文件
我已将json文件上载到s3 然后我编写了以下代码来查询这个文件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
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
语法。