@AFI19

Почему после перезагрузки страницы выполняется только 1 запрос к БД?

При первой загрузке страницы, после старта сервера, выполняются оба запроса, после перезагрузке страницы только первый.
app.js
var connection = require('./lib/db');

global.connection = connection;

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

connection.connect(function(err) {
    if(err) throw err;

    console.log('Connected');
});

module.exports = connection;


index.js
router.get('/', function (req, res, next) {
    let data = {};
    connection.query("SELECT * FROM hc_posts ORDER BY id DESC LIMIT 10", function (err, result, fields) {
        if (err) throw err;
        data.posts = result;
    });
    connection.query("SELECT COUNT(*) FROM hc_posts", function (err, result, fields) {
        if (err) throw err;
        data.amount = result[0]['COUNT(*)'] + 1;
    });

    res.render('index', { data: data });
});
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 2
notiv-nt
@notiv-nt
Как ваше ничего? Да, моё тоже
Решение:
router.get('/', function (req, res, next) {
    let data = {};

    connection.query("SELECT * FROM hc_posts ORDER BY id DESC LIMIT 10", function (err, result, fields) {
        if (err) throw err;
        data.posts = result;

        connection.query("SELECT COUNT(*) FROM hc_posts", function (err, result, fields) {
            if (err) throw err;

            data.amount = result[0]['COUNT(*)'] + 1;

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


но оно так себе
Ответ написан
Комментировать
@marataziat
Джангист-тракторист
Дело в том что вы используете асинхронный код с синхронным! То есть запрос в базу данных не успевает выполнится а уже идет респонс! Когда вы что-то делаете в асинхронном коде компилятор не ждет строку пока выполнится, он просто перебегает через неё а потом выполняет то что нужно внутри ..then когда запрос выполнился! В fetch API браузера есть похожая проблема, вы можете использовать async/await чтоб избежать асинхронного кода через .then()!!
Было:
fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });


Стало:
let response = await fetch(`https://api.github.com/users/${name}`);
 let data = await response.json()

Делайте анологично с вашим кодом!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы