Выполнение двух запросов к одной и той же таблице и реализация их по одному и тому же маршруту

#javascript #mysql #node.js #express #ejs

Вопрос:

Как я могу заставить это работать?

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

Я просто хочу выполнить два разных запроса к одной и той же таблице и использовать возвращаемые значения в одном и том же файле ejs

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

    db.query('SELECT COUNT(*) AS count, FORMAT(SUM(donation_amount),2) AS total FROM donations;', (err, result) => {
        if (err) throw err;
        let count = result[0].count; //since query column is requested as "count". we can use "count" to get back the raw value
        let total = result[0].total;
        res.render('home', { count: count, total: total }); // just the file name is enough. ejs engine looks up the file name in the "views" folder
    });

    db.query('SELECT CONCAT(first_name, ", ", last_name AS latest_donator, donation_amount AS amount FROM donations ORDER BY donation_time LIMIT 1;', (err, result) => {
        if (err) throw err;
        let donatorName = result[0].latest_donator;
        let amount = result[0].amount;
        res.render('home', {first_name: donatorName, amount: amount});
    });
 });
 

Ответ №1:

Вы можете отправить ответ ( res.render(...) ) только после того, как получите результат обоих запросов. Поэтому вы можете захотеть выполнять их последовательно, как это.

 app.get('/', (req, res) => {
    db.query('SELECT COUNT(*) AS count, FORMAT(SUM(donation_amount),2) AS total FROM donations;', (err, result) => {
        if (err) throw err;
        let count = result[0].count; //since query column is requested as "count". we can use "count" to get back the raw value
        let total = result[0].total;
        db.query('SELECT CONCAT(first_name, ", ", last_name AS latest_donator, donation_amount AS amount FROM donations ORDER BY donation_time LIMIT 1;', (err, result) => {
            if (err) throw err;
            let donatorName = result[0].latest_donator;
            let amount = result[0].amount;
            res.render('home', { first_name: donatorName, amount: amount, count: count, total: total });
        });
    });
});
 

Но запросы независимы друг от друга, поэтому вы можете запускать их параллельно.

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

1. Спасибо, чувак. Это был хороший ответ. Также не могли бы вы указать мне на дружественные для начинающих вводные документы/учебные пособия и т.д. за обещания, если я не слишком многого прошу?

2. Ознакомьтесь с документацией Mdn здесь