Добрый день.
Пытаюсь написать небольшое приложение на 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. Как выкручиваться?
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Нужно добавить колонку, в которую при добавлении строки записывалось бы имя текущего дня неделиПробовал с несколькими типами и ставил значение...
Доброго времени сутокПостараюсь максимально подробно описать входные данные и задачу
Может кто знает и сможет подсказать, как реализована (с помощью чего) карта в этом приложении (ТЫК)