express.js с MySQL - PullRequest
       4

express.js с MySQL

0 голосов
/ 21 февраля 2019

Я только начал изучать node.js ... Вот пример моего кода.В этом примере все работает.

Но у меня есть вопрос.Как сделать несколько запросов SQL и отправить результаты в шаблон?

На данный момент я могу сделать это только для одного запроса ...

Спасибо.

 //connection database
var connection = mysql.createConnection({
host     : 'localhost',
user     : 'root',
password : 'password',
database : 'test'
});

connection.connect(function (err){
 if (err) throw err; 
    console.log('Database connected . . . \n\n');

});

router.get('/', function(req, res, next) {
  var sql = 'SELECT * FROM `test`';
   connection.query(sql, function(err, rows, field){
     if (err) throw err; 
     res.render('index', {
        data: rows
      })
   });
 });

1 Ответ

0 голосов
/ 22 февраля 2019

Вот ответ после моего комментария, так как вы упомянули, что не можете понять это самостоятельно.

Первый фрагмент использует обещания , функцию быстрого помощника, но без внешней библиотеки.Второй фрагмент использует внешнюю библиотеку async.js и является немного более сложным для обратных вызовов.Оба они решают проблему, предполагая, что мы хотим, чтобы запросы выполнялись параллельно.

С обещаниями

router.get('/', async function(req, res, next) {
    var queries = ['SELECT * FROM `test`', 
                   'SELECT * FROM `test2`', 
                   'SELECT * FROM `test3`'];

    var allResults  = [];
    /*transform our `query` array into an array of promises, then 
      await the parallel resolution of all the promises*/
    var allQueryRows = await Promise.all(queries.map(query => promiseQuery(query))); 

    /*'allQueryRows' is an array of rows, so we push each of those
       into our results*/
    allQueryRows.forEach(function(rows){
        allResults.push(...rows);
    });

    res.render('index', {
        data: allResults
    })
});

function promiseQuery(sqlQuery){
    return new Promise((resolve, reject) => {
        connection.query(sqlQuery, function(err, rows, field){
            if(err) 
                return reject(err);
            resolve(rows);
        })
    })
}

С обратными вызовами и async.js

const async = require('async');

router.get('/', function(req, res, next) {
    var queries = ['SELECT * FROM `test`', 
                   'SELECT * FROM `test2`', 
                   'SELECT * FROM `test3`'];

    var allResults  = [];

    async.each(queries, function(sqlQuery, callback){
        connection.query(sqlQuery, function(err, rows, field){
            if(err)
                throw err;
            allResults.push(...rows);
            callback();
        });
    }, function(){
        res.render('index', {
            data: allResults
        });     
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...