загрузите файл, используя объект res в express.js, а затем отправьте ответ как true, используя res.json - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю 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}) после загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...