试图从s3存储桶中获取文件并将其存储在本地,一旦将其写入本地,则从本地读取文件并将数据转换为json格式并发送。
我需要检查文件是否已下载并写入本地,一旦文件存在,只能读取并将其转换为json,否则发送错误消息。
一旦文件打开,我正在写文件并结束。因此,结束后我无法发送返回值。因此,我如何解决这一问题并使用try catch发送适当的错误消息。
const fetchFileDownloadAndWriteIt = () => {
let Bucket = "DataBucket";
let filename = "sample_data.csv";
let s3 = new AWS.S3();
const params = {
Bucket: Bucket,
Key: filename
};
return s3.getObject(params)
.promise()
.then(data => {
const file = fs.createWriteStream('./localdata/' + filename);
file.on("open", () => {
file.write(data.Body);
file.end();
})
.on("error", err => {
console.log("Error Occured while writing", err.message)
})
})
.catch(err => {
console.log("unable to fetch file from s3 Bucket", err.message)
})
}
exports.fetchData = async (req,res) => {
let fileDownloadAndWrite = await fetchFileAndDownloadWriteIt();
// need to check file is downloaded and written properly
const path = "./localdata/sample_data.csv";
const json = await csv().fromFile(path);
res.send({data: json})
}
答案 0 :(得分:1)
您可以通过调用new Promise
API来返回SDK's
而不是返回的return new Promise((res, rej) => {
s3.getObject(params)
.promise()
.then(data => {
const file = fs.createWriteStream('./localdata/' + filename);
file
.on("open", () => {
file.write(data.Body);
file.end();
//success
res();
})
.on("error", err => {
rej(err);
})
})
.catch(err => {
rej(err);
})
});
。
undefined
这将解析为exports.fetchData = async (req, res, next) => {
try {
await fetchFileDownloadAndWriteIt();
// need to check file is downloaded and written properly - here the file is actually downloaded and written properly.
const path = "./localdata/sample_data.csv";
const json = await csv().fromFile(path);
res.send({ data: json })
}
catch (err) {
return next(err);
}
}
并被拒绝,并出现适当的错误,例如在写入文件时等。
如何在处理程序中调用它?
这样的事情就可以了。
{{1}}