#javascript #node.js #mongodb #express #monk
#javascript #node.js #mongodb #выражать #монах
Вопрос:
Я использую Express.js и у меня есть этот простой маршрутизатор
router.get('/', function(req, res) {
var userlist;
req.db.get("usercollection").find({},{})
.success(function(docs){
userlist = docs;
});
res.render('index', { title: 'Express' , userlist: userlist});
});
но ничего не попадает в список пользователей. Я знаю, что написание вышеизложенного как
router.get('/', function(req, res) {
req.db.get("usercollection").find({},{})
.success(function(docs){
res.render('index', { title: 'Express' , userlist: docs});
});
});
будет работать, но я хотел бы знать, почему предыдущий не работает. Кроме того, что возвращает db.get(…).find()? Возвращает ли он то же самое, что и «docs» в более позднем коде?
Большое спасибо
Ответ №1:
Это потому, что req.db.get().find() является асинхронной функцией. «res.render» может происходить до назначения userlist= docs.
Комментарии:
1. Итак, как бы я поступил, если бы захотел отобразить несколько наборов коллекций?
2. Я вижу 2 варианта: создание большого запроса, который получает все необходимые вам документы, «организует» их на стороне сервера, а затем отправляет их для рендеринга, или вложение нескольких запросов. Я думаю, что второй вариант лучше.
3. Это кажется довольно сложным. Может быть, альтернативой было бы получать нужные мне запросы с помощью вызовов AJAX (например, restful api) при загрузке страницы?
4. Вы тоже можете это сделать. Однако, в зависимости от взаимосвязи между вашими коллекциями, вы можете делать такие вещи, как «заполнить» (в случае, если вы используете Mongoose), например.