Файл Excel не загружается в Noe JS - PullRequest
0 голосов
/ 03 октября 2019

Я не могу загрузить файл Excel в API отправки Nodejs из внешнего интерфейса (угловой 4). Может кто-нибудь помочь мне здесь? Я прилагаю изображение и исходный код, который я использую в бэкэнде в узле js.

Снимок экрана ошибки

app.controllers.getExcel = function (req, res){

    console.log("------------------------------CHECK===========================")
    console.log("------------------------------CHECK===========================")
    console.log("------------------------------CHECK===========================")
    var include = [app.db.cases];
    var perPage = req.query.limit ? Number(req.query.limit) : 200,//showing 200 record per page
        page = req.query['page'] ? Number(req.query['page']) - 1 : 0,
        query = {};

    if (req.query.case_id) {
        query['case_id'] = Number(req.query.case_id);
    }
    query.status = {"$notIn": ['completed', 'QA-Completed', 'QA-Pending']};
    if(req.role.name == 'lea'){
        query.status = {"$notIn": ['completed', 'waiting', 'inprogress']};
    }
    if (req.query.start_date && req.query.end_date) {
        var date = new Date(req.query.start_date.substr(0, 10));
        var edate = new Date(req.query.end_date.substr(0, 10));
        edate.setDate(edate.getDate() + 1);
        edate = edate.toString();
        query.createdAt = {$gte: date, $lt: edate}
    }
    if (req.query.client_id) {
        query['client_id'] = req.query.client_id;
    }
    if (req.query.company_id) {
        query['company_id'] = req.query.company_id;
    }
    if (req.query.sort) {
        query['sort'] = req.query.sort;
    }

    let w = {}

    if (req.query.cnic || req.query.lastName || req.query.firstName || req.query.fatherName ||
        req.query.city) {
        delete query.status;
        w = {}
        if (req.query.cnic) {
            w['emp_id'] = {"$like": "%" + req.query.cnic + "%"};
        }
        if (req.query.city) {
            w['city'] = {"$like": "%" + req.query.city + "%"};
        }
        if (req.query.fatherName) {
            w['fatherName'] = {"$like": "%" + req.query.fatherName + "%"};
        }
        if (req.query.lastName) {
            w['lastName'] = {"$like": "%" + req.query.lastName + "%"};
        }

        if (req.query.firstName) {
            w['firstName'] = {"$like": "%" + req.query.firstName + "%"};
        }

        include = [
            {
                model: app.db.cases,
                where: w
            }
        ]

    }

    $where = {"$or": [{is_qa: 1}, {vo_updated: 1, qa_verified: 1}, {vo_updated: 1, qa_verified_dt: null}]};

    var requ = false;
    if (req.query.service_id) {
        $where = {}
        $where['vo'] = {"$in": req.query.service_id.split(',')}
        requ = true
    }
    if (req.query.qaStatus && req.query.qaStatus != '') {
        $where['qa_verified'] = req.query.qaStatus;
        delete query.status;
        requ = true
    }
    if (req.query.casetatus && req.query.casetatus != '') {
        $where['v_status_id'] = req.query.casetatus;
        delete query.status;
        requ = true
    }
    if (req.query.leaStatus && req.query.leaStatus != '') {
        $where['lea_status'] = req.query.leaStatus;
        delete query.status;
        requ = true
    }
    if (req.query.status) {
        query['status'] = {$or: req.query.status.split(/(?:,| )+/)};
    }

    include.push({
        model: app.db.CaseVerification,
        where: $where,
        required: requ,
        include: [{
            model: app.db.VerificationStatus,
            required: false
        }, {
            model: app.db.User,
        },]
    })


    CRUD.findPaginationWithRelation(CHECKS, page, perPage, include, async function (err, docs) {
        if (err) {
            return res.send(400, {
                code: 400,
                message: "Database Occurred Error",
                success: false,
                error: err
            });
        } else {
            if (docs) {
                var row = JSON.parse(JSON.stringify(docs.rows));

                for (let i = 0; i < row.length; i++) {

                    if (row[i].vo && row[i].vo > 0) {
                        row[i].VO_USER = await CRUD.findOneSync(app.db.User, {id: row[i].vo});
                    }
                }
                let workbook = new excel.Workbook(); //creating workbook
        let worksheet = workbook.addWorksheet('Customers'); //creating worksheet

        //  WorkSheet Header
        worksheet.columns = [
            { header: 'Id', key: 'id', width: 10 },
            { header: 'Name', key: 'name', width: 30 },
            { header: 'Address', key: 'address', width: 30},
            { header: 'Age', key: 'age', width: 10, outlineLevel: 1}
        ];
        worksheet.addRows(row);

        res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        res.setHeader('Content-Disposition', 'attachment; filename=' + 'customer.xlsx');

        return workbook.xlsx.write(res)
              .then(function() {
                    res.status(200).end();
              });
                res.send({
                    code: 200,
                    success: true,
                    message: "SuccessFully Find",
                    CHECKS: row,
                    page: page + 1,
                    totalPages: Math.ceil(docs.count / perPage),
                    count: docs.count
                });
            } else {
                console.log('--------------------------EMPTY DOC--------------------')
                res.send({
                    code: 200,
                    success: true,
                    message: "SuccessFully Find",
                    CHECKS: [],
                    page: page + 1,
                    totalPages: 0,
                    count: 0
                });
            }
        }
    }, query)
};

Ошибка необработанного отклонения: невозможно установить заголовки после их отправки.

1 Ответ

0 голосов
/ 03 октября 2019

Об ошибке «Ошибка необработанного отклонения: невозможно установить заголовки после их отправки». хорошее объяснение можно найти по адресу Ошибка: невозможно установить заголовки после их отправки клиенту

Однако я считаю, что это не проблема. TypeError: res.status(...).end is not a function ошибка - проблема. Метод "конец" был удален из Express 5.x. Альтернативой будет res.status(status).send(http.STATUS_CODES[status])

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