Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2013, 03:42
Новичок на форуме
Отправить личное сообщение для karnwaron Посмотреть профиль Найти все сообщения от karnwaron
 
Регистрация: 14.01.2013
Сообщений: 2

Простой модуль новостей в node.js
Всем привет!
Раньше я написал на PHP движок сайта - там было всё просто, т.к. код выполняется последовательно. В node.js же заступорился на самом простом - неясно как выводить контент, код ведь асинхронный! Обычная выборка из базы и обработка результата тут уже не катит, так как обработка эта происходит асинхронно и фиг поймешь что когда обрабатывается и как это всё вместе слепить.
Объясните, пожалуйста, как написать самый простой код вывода контента из базы. Если знаете простенькие cms на ноде - прошу поделиться ссылкой.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2013, 08:56
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

https://github.com/nin-jin/node-jin#sod

какая база то?
__________________
.ня
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2013, 10:14
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 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);
            });                
        }
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2013, 11:21
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2013, 11:26
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

Сообщение от tenshi Посмотреть сообщение
var result= $.jin.fiberizer(global.db).querySync(query, qparams)


да и теперь я даже не знаю как поведёт себя эта ф-ия, если в текст sql-запроса вкрадётся ошибка. скорее всего, выбросит иксепшн, который будучи непойманным, обрушит весь процесс.
может, обойдёмся без магии?
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2013, 17:52
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

объект исключения будет пойман и передан первым параметром в колбэк.
а вот без магии если в колбэке произойдёт исключение, то да, кранты)
__________________
.ня
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2013, 23:23
Новичок на форуме
Отправить личное сообщение для karnwaron Посмотреть профиль Найти все сообщения от karnwaron
 
Регистрация: 14.01.2013
Сообщений: 2

Прошу прощения, не совсем правильно выразился..
В общем, мне нужно правильно составить замыкание:
for(var i=0;i<num;i++){
  somefunc(arg, function(err, args){ // callback
    // ?
  });
}


Конкретно - я не понимаю, как достать переменную i цикла изнутри callback, которая вызывается из асинхронной функции somefunc
Ответить с цитированием
  #8 (permalink)  
Старый 20.01.2013, 02:24
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 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
                });                    
            }


шедеврально
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2013, 18:29
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

а что тебя смущает?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49
Разработчик Node.js в США (Сиэтл) Akvelon Работа 0 29.08.2012 10:47
Javascript-разработчик (ExtJS, node.js), 50 000 - 80 000, СПб IrinaS Работа 0 03.04.2012 20:40
Node.js Kolyaj Серверные языки и технологии 49 24.05.2010 22:29
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31