Я создаю REST API, который позволит пользователю загружать файл при вызове API, файл загружается, но дополнительно мне нужно отправить ответ обратно, используя res.json({status : true})
после успешной загрузки файла и удаления из файловая система.
Я пробовал много разных способов, таких как использование модуля запроса, создание собственного промежуточного программного обеспечения, но ничего не работает. Либо файл не загружен и ответ отправлен, либо ответ не отправлен, но файл загружен.
Пожалуйста, найдите код API ниже:
router.route('/generatePdf')
.get((req, res, next) => {
res.json({
status: false,
message: "Invalid Request made"
})
})
.post((req, res, next) => {
try{
let id = req.body.id;
console.log(id + " :this is id"); //I get the mongo ID here
if(id != null && id != ''){
if(validator.isMongoId(id)){
//fetch the data and generate the pdf
myFunctions.fetchInfoById(id, (err, user) => {
if (err) {
console.log('Err in fetchInfoById '+err);
res.json({
status: false
})
} else if (user!= null && user!= '') {
res.render('./referral/referralPdf/PdfTemplate.ejs', {
user: user
}, (err, html) => {
if (err) {
console.log('Err in rendering PDFTemplate ' + err);
res.json({
status: false
})
} else {
let options = {
format: 'A4', // allowed units: A3, A4, A5, Legal, Letter, Tabloid
orientation: 'portrait',
timeout: '100000',
zoomFactor: 0.7
}
pdf.create(html, options).toFile('./public/pdf/' + 'report.pdf', (err, response) => {
if (err) {
console.log('Error in generating pdf' + err);
res.json({
status: false
})
} else {
res.download(response.filename, 'fileContent.pdf', (err) => {
if (err) {
console.log(err);
} else {
fs.unlink(response.filename, (err) => {
if (err) {
console.log(err);
//send response as
res.json({
status : false
})
}else{
console.log('FILE REMOVED!');
res.json({
status : true
})
}
});
}
})
}
})
}
})
} else {
res.json({
status: false
})
}
})
} else {
res.json({
status: false
})
}
} else {
res.json({
status: false
})
}
} catch(e){
console.log("catch " + e);
res.json({
status: false
})
}
})
Пожалуйста, помогите мне в достижении этого, я занимался этим часами, но не мог найти лучшего решения.
P.S .: с кодом выше я получаю ошибку can't set headers after they are sent to the client
Проблема, с которой я сталкиваюсь, - отправка ответа клиенту после успешной загрузки и удаления файла из файловой системы. Я могу использовать res.render()
, а затем res.download()
. но я не могу использовать res.json({status : success})
после загрузки.