Для каждого вызова getBookList
вы помещаете полученный массив книг в другой массив, bookList
.
Итак, скажите, что у вас есть один документ в базе данных, и наберите getBookList
. После этого bookList
будет выглядеть примерно так:
bookList = [ [ 'book 1' ] ]
Затем вы добавляете другую книгу и снова звоните getBookList
. Теперь bookList
выглядит так:
bookList = [ [ 'book 1' ], [ 'book 1', 'book 2' ] ]
Однако вы всегда используете bookList[0]
, поэтому результат первого вызова getBookList
. Это никогда не будет содержать новые документы, потому что они появятся только в более поздних записях к bookList
.
Это не самая большая проблема, которую нужно решить, потому что вы используете bookList
в качестве глобальной переменной, что не очень хорошая идея. Вместо этого getBookList
должен передать список книг вызывающей стороне.
Это заставит код выглядеть примерно так:
function getBookList(username, callback){
Book.find({'username': username}, 'bookTitle author', function(err, userBooks) {
callback(err, userBooks);
});
};
router.get('/', ensureAuthenticated, function(req, res, next) {
getBookList(req.user.username, function(err, userBooks) {
if (err) return handleError(err);
else if (userBooks.length > 0) {
res.locals.user.books = userBooks;
res.render('index', { title: 'library' });
} else {
// handle the situation where no books were found
...
}
});
Есть также некоторые другие изменения, такие как отделение getBookList
от модели (Book
) и запрос (req
).