Отлов прихода данных с БД в Node.JS

384
31 января 2017, 21:35

Добрый день.

Пытаюсь написать небольшое приложение на Node.JS. Смысл его прост: при запросе браузером страницы обратиться к БД, получить имя запрашиваемой страницы и передать данные дальше пользователю.

Работаю с express и mysql.

Данные получить из БД у меня получается, отобразить страницу тоже. Проблема в том, что страница отдается раньше, чем приходят данные из БД.

Мой код:

var config = require('../config.json');
var mysql = require('mysql');
var connection = mysql.createConnection(config.db);
connection.connect();
var getPageData = function (req, next) {
    req.pageData = {
        title: 'MySite - '
    };
    var sql = 'SELECT `name` FROM `pages` WHERE `path`="' + req.url + '";';
    var query = connection.query(sql);
    query.on('error', function (err) {
        throw err;
    });
    query.on('result', function(res) {
        req.pageData.title += res['name'];
    });
    next();
};
router.get('/', getPageData, function (req, res, next) {
    res.render('index', req.pageData);
});

UPD: Понял, что такое callback и сделал через него:

function getPageData(req, callback) {
    var sql = 'SELECT `name` FROM `pages` WHERE `path`="' + req.url + '";';
    var query = connection.query(sql);
    query.on('error', function (error) {
        throw error;
    });
    query.on('result', function (result) {
        req.pageData = {
            title: 'MySite - ' + result['name']
        };
    });
    query.on('end', function () {
        callback(req);
    });
}
router.get('/', function (req, res, next) {
    getPageData(req, function () {
        res.render('index', req.pageData);
    });
});

Данный метод работает, но полагаю, что будут проблемы когда я начну перед отправкой страницы пользователю брать еще какие-либо данные из БД. Начнется callback hell. Как выкручиваться?

READ ALSO
DAYNAME(CURDATE())

DAYNAME(CURDATE())

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

294
Как составить запрос к БД mysql?

Как составить запрос к БД mysql?

Есть структура базы:

329
Сортировка MYSQLI. Создание рейтинга

Сортировка MYSQLI. Создание рейтинга

Доброго времени сутокПостараюсь максимально подробно описать входные данные и задачу

356
Вопрос про кастомные карты [требует правки]

Вопрос про кастомные карты [требует правки]

Может кто знает и сможет подсказать, как реализована (с помощью чего) карта в этом приложении (ТЫК)

346