Не удается получить доступ к переменной, объявленной внутри функции connection.query - PullRequest
0 голосов
/ 01 июля 2019

Я получаю результат из запроса и сохраняю его в переменной, которую я отправлю через рендер, но проблема, которую он дает, - ошибка переменной не определена. Пожалуйста, помогите мне. Исправьте код, если возможно, пожалуйста.

router.get('/create',(req,res)=>{

        connection.query('SELECT * FROM purchases',function(error,results,fields){

            var voucher = 'PH-'+results.length+1;
            connection.query('SELECT * FROM vendors where wid=?',[req.session.w_id],function(err,res,f){
                var vendors=res;
                connection.query('SELECT * FROM products where wid=?',[req.session.w_id],function(er,r,fi){
                    var products=r;


                })
            })

        });

        res.render('purchase_create',{voucher:voucher,vendors:vendors,products:products});  

});

Ошибка: ваучер не определен

Ответы [ 2 ]

1 голос
/ 01 июля 2019

voucher доступно только внутри функции обратного вызова, которую вы передаете connection.query, то же самое с vendors и products. Вам нужно переместить вызов res.render во внутреннюю функцию, чтобы эта работа работала:

router.get('/create', (req, res) => {
  connection.query('SELECT * FROM purchases', function (error, results, fields) {
    var voucher = 'PH-' + results.length + 1;
    connection.query('SELECT * FROM vendors where wid=?', [req.session.w_id], function (err, res, f) {
      var vendors = res;
      connection.query('SELECT * FROM products where wid=?', [req.session.w_id], function (er, r, fi) {
        var products = r;

        res.render('purchase_create', { voucher: voucher, vendors: vendors, products: products });
      });
    });
  });
});
0 голосов
/ 03 июля 2019

Для метода запроса объекта соединения требуется функция обратного вызова, которая будет выполняться всякий раз, когда запускается одно из трех событий - ошибка, поля, результаты, которые здесь обозначаются параметрами err, fields и row соответственно.

router.get('/create', (req, res) => {
  connection.query('SELECT * FROM purchases', function (error, results, fields) 
  {
    if (error) throw error;

    var voucher = 'PH-' + results.length + 1;
    connection.query('SELECT * FROM vendors where wid=?', [req.session.w_id], function (err, res, f) 
    {
         if (err) throw err;
         var vendors = res;
         connection.query('SELECT * FROM products where wid=?', [req.session.w_id], function (er, r, fi) 
         {
             if (er) throw er;
             var products = r;
             res.render('purchase_create', { voucher: voucher, vendors: vendors, products: products });
        });
     });
  });
});
...