2015-03-05 6 views
1

Следующий маршрутизатор вызывает шаблон ejs, чтобы заполнить значения курсора на странице html.Курсор Mongodb пуст в шаблоне ejs (вызов Async внутри ejs)

router.get('/users_loaded_disconnect', function(req, res) { 
    res.render('users_loaded_disconnect', 
      {cursor: req.db.collection('notify_user_state_collection').find({})}); 
}); 

user_loaded_disconnect.ejs

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
    <b> Users Loaded Disconnect </b> 
    <ul> 
     <% cursor.nextObject(function(err, item) { %> 
     <%= JSON.stringify(item) %> 
     <% }); %> 
    </ul> 
    </body> 
</html> 

Курсор не работает. Однако, если курсор повторяется в маршрутизаторе как следующий код печатает значение

req.db.collection('notify_user_state_collection').find({}).nextObject(function(err, item) { 
     console.log(JSON.stringify(item)); 
    }); 

Что плохое в переборе курсора внутри шаблона EJs?

ответ

1

Операция курсора асинхронна. Ejs не будет ждать его завершения и будет продолжать отображать шаблон до того, как будут доступны данные. Вы не можете эффективно использовать обратные вызовы внутри шаблонов ejs.

Смежные вопросы