
14.01.2013, 03:42
|
Новичок на форуме
|
|
Регистрация: 14.01.2013
Сообщений: 2
|
|
Простой модуль новостей в node.js
Всем привет!
Раньше я написал на PHP движок сайта - там было всё просто, т.к. код выполняется последовательно. В node.js же заступорился на самом простом - неясно как выводить контент, код ведь асинхронный! Обычная выборка из базы и обработка результата тут уже не катит, так как обработка эта происходит асинхронно и фиг поймешь что когда обрабатывается и как это всё вместе слепить.
Объясните, пожалуйста, как написать самый простой код вывода контента из базы. Если знаете простенькие cms на ноде - прошу поделиться ссылкой.
|
|

14.01.2013, 08:56
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
__________________
.ня
|
|

14.01.2013, 10:14
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
а что непонятно-то?
вот например ф-ия, возвращающая список пользователей по маске)
getList: function (param, callback) {
var users = [],
sLogin = stringify(param.login),
sName = stringify(param.username),
iStatus = integerify(param.status),
query = 'SELECT * FROM "T_User" ' +
'WHERE ($1 = \'\' OR login LIKE $1) ' +
' AND ($2 = \'\' OR name LIKE $2) ' +
' AND ($3 = 0 OR status = $3) ' +
'ORDER BY login; ',
qparams = [sLogin, sName, iStatus];
global.db.query(query, qparams, function (err, result) {
if (err) {
console.log(global.color(global.ERR_USERS_LOAD, 'red') + err);
callback({ error: global.ERR_USERS_LOAD, error2: err });
return;
}
for (var i = 0; i < result.rows.length; i++) {
users.push({
id: result.rows[i].id,
login: result.rows[i].login,
userpic: result.rows[i].userpic,
name: result.rows[i].name,
status: result.rows[i].status
});
}
callback(users);
});
}
|
|

14.01.2013, 11:21
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
или немного магии:
getList: $.jin.sync2async( function (param) {
var users = [],
sLogin = stringify(param.login),
sName = stringify(param.username),
iStatus = integerify(param.status),
query = 'SELECT * FROM "T_User" ' +
'WHERE ($1 = \'\' OR login LIKE $1) ' +
' AND ($2 = \'\' OR name LIKE $2) ' +
' AND ($3 = 0 OR status = $3) ' +
'ORDER BY login; ',
qparams = [sLogin, sName, iStatus];
var result= $.jin.fiberizer(global.db).querySync(query, qparams)
for (var i = 0; i < result.rows.length; i++) {
users.push({
id: result.rows[i].id,
login: result.rows[i].login,
userpic: result.rows[i].userpic,
name: result.rows[i].name,
status: result.rows[i].status
});
}
return users
} )
__________________
.ня
Последний раз редактировалось tenshi, 14.01.2013 в 17:53.
|
|

14.01.2013, 11:26
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
Сообщение от tenshi
|
var result= $.jin.fiberizer(global.db).querySync(query, qparams)
|
да и теперь я даже не знаю как поведёт себя эта ф-ия, если в текст sql-запроса вкрадётся ошибка. скорее всего, выбросит иксепшн, который будучи непойманным, обрушит весь процесс.
может, обойдёмся без магии?
|
|

14.01.2013, 17:52
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
объект исключения будет пойман и передан первым параметром в колбэк.
а вот без магии если в колбэке произойдёт исключение, то да, кранты)
__________________
.ня
|
|

19.01.2013, 23:23
|
Новичок на форуме
|
|
Регистрация: 14.01.2013
Сообщений: 2
|
|
Прошу прощения, не совсем правильно выразился..
В общем, мне нужно правильно составить замыкание:
for(var i=0;i<num;i++){
somefunc(arg, function(err, args){ // callback
// ?
});
}
Конкретно - я не понимаю, как достать переменную i цикла изнутри callback, которая вызывается из асинхронной функции somefunc
|
|

20.01.2013, 02:24
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
вопрос не корректен, в какой функции? пользовательской или ноды ?
(function(i){somefunc(arg, function(err, args){ console.log(i+1) });})(i)
все ответы на подобные вопросы неоднократно есть на форуме и в учебнике. вы 4 за 3 дня с таким вопросом. Научитесь пользоваться поиском по сайту, гуглом , учебником..
А уж тем более не зная языка , писать на ноде......
Последний раз редактировалось dmitriymar, 20.01.2013 в 02:29.
|
|

30.01.2013, 15:23
|
Профессор
|
|
Регистрация: 11.04.2012
Сообщений: 255
|
|
for (var i = 0; i < result.rows.length; i++) {
users.push({
id: result.rows[i].id,
login: result.rows[i].login,
userpic: result.rows[i].userpic,
name: result.rows[i].name,
status: result.rows[i].status
});
}
шедеврально
|
|

30.01.2013, 18:29
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
а что тебя смущает?
|
|
|
|