Добрый день.
Пытаюсь написать небольшое приложение на 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. Как выкручиваться?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей