Есть ли способ использовать результаты первого запроса mysql для выполнения второго запроса с использованием NodeJS

#node.js #express

#node.js #выразить

Вопрос:

У меня есть два запроса mysql для запуска. Я могу запустить второй запрос только на основе результата, который я получил от первого запроса. Моя проблема в том, что я не знаю, как передать результат в качестве параметра второму запросу

 
router.post('/member/add', (req, res)=>{
        let ins_company = req.body.ins_company
        let firstname = req.body.firstname
        let othernames = req.body.othernames
        let surname = req.body.surname
        let member_no = req.body.new_member_no
        let status = req.body.card_status
        let card_pin = req.body.card_pin
        let join_date = req.body.join_date_now
        let date_of_birth = req.body.dateofbirth
        let sex = req.body.patient_sex
        let telephone_no = req.body.tel
        let nationality = req.body.patient_nationality
        let employer = req.body.employer
        let employer_id = req.body.employer_id
        let health_plan = req.body.health_plan
        let email = req.body.email
        let relationship = req.body.relationship
        let picpath = req.body.filepath0
        let member_type = req.body.member_type
        let rx_member_id = req.body.rx_member_id
        let member_plan_id = 'SLB Medical Plan'

        let result

        result = db.query("SELECT * FROM company_plan WHERE PlanID = ?",[member_plan_id],(err,row,fields)=>{
            if(err){
                console.log("Some errors "  err)
                res.end()
                return
            }

            res.end()
                return
            let member_plan = row[0].Plan

            const queryString = "INSERT INTO patient_info_registration(ins_company,member_plan,surname,firstname) VALUES(?,?,?,?)"
            db.query(queryString, [
                ins_company,
                member_plan,
                surname,
                firstname
            ], (err,row,fields)=>{
            if(err){
                console.log("Some errors "  err)
                res.end()
                return
            }
            res.json(row);
        })


        })
        })




    })

    module.exports = router
  

Я хочу иметь возможность передавать переменную member_plan = row[0].Планируйте следующий запрос.

Комментарии:

1. Было бы намного лучше использовать INSERT ... SELECT здесь в одном операторе, чтобы вы могли гарантировать, что все будет сделано в одной приятной транзакции автоматически.

Ответ №1:

Вы можете просто удалить оператор return и res.end() из :

  res.end()
                return
            let member_plan = row[0].Plan
  

и передайте значение member_plan вашему второму запросу, потому что это значение находится в вашей первой функции обратного вызова.

Однако я бы посоветовал вам создать какую-нибудь функцию для уточнения вашего кода вместо того, чтобы делать все в одном месте. Вы также можете использовать Promise или Async / Await вместо обратного вызова, что намного лучше для написания чистого кода и избежания «ада обратного вызова»

Более того, вы можете использовать деструктурирование для получения всех данных из req.body следующим образом :

 let { health_plan, email, relationship, etc... } = req.body;
  

Это с созданием всех ваших переменных со значением req.body.{variableName} внутри