2012-04-18 2 views
0

Я использую express и mysql-native с nodejs. С MySQL родной я поток результатов из БД построчно, как это (в кофе):Потоковые результаты и res.render nodejs

exports.getUser = (username,callback) -> 
query = mysql.query "select * from users where username = #{username}" 
query.on "row", (row)-> 
    callback row 

(очевидно, я бы использовать подготовленные заявления, это пример)

Такого рода метод выигранные» т работа с res.render, потому что вы не можете быть вызовом res.render несколько раз каждый раз, когда вы получаете новую строку

database.getUser "username", (result)-> 
    res.render "people", "data" : result 

есть ли какой-либо другой способ передачи данных в потоковом или я должен течь результаты в целях с розетками?

+0

Как вы собираетесь визуализировать представление постепенно? Это даже не возможно в большинстве движков шаблонов. –

+0

Мне все равно, как это делается, я просто не хочу попасть в сокеты. Если бы я мог избежать этого, я был бы рад – powerc9000

ответ

0

Я понял это вчера вечером в момент вдохновения, так как я передаю данные, которые я могу слушать, когда поток заканчивается и запускает мой обратный вызов. Таким образом, я могу подтолкнуть данные к массиву, а затем использовать при обратном вызове следующим образом:

query = mysql.query "select * from users where id = 2" 
data = [] 
query.on "row", (row)-> 
    data.push row 
query.on "end",()-> 
    callback data 
+0

Именно об этом я и говорил. Вы не можете «потопить» представление (в обычных обстоятельствах). Сначала вам нужно все данные, прежде чем вы сможете их визуализировать. –

+0

Ну да, ваш комментарий был очень полезен. Это заставило меня думать иначе, а не потопить результат. но считаете ли вы это лучшей практикой? – powerc9000

+0

Все в порядке. Обычно простого асинхронного драйвера достаточно, если вы не выполняете вычисления/преобразования на больших наборах данных, тогда потоковая передача дает вам огромные преимущества в производительности. –

0

вы можете использовать предпочтительный шаблонизатор непосредственно

var row = _.template('<tr><td> <%= id > </td> </tr>'); 
... 
database.getUser "username", (result)-> 
    res.write(row(result)); 
Смежные вопросы