2014-10-06 2 views
0

Я использую базу данных MongoDB. Для фронта AngularJS.Mongoose, AngularJS, NodeJS

Кроме того, я использую Mongoose.

у меня есть:

app.get("/images", function(req, res) { 
    mongoose.model('Image').find(function (err, images) { 
     res.send(images); 
    }); 
}); 
app.listen(3000); 

Он отлично работает, когда я иду: http://localhost:3000/images

затем:

<div ng-repeat="photo in photos"> 
    <!-- My Data List --> 
    <h3>{{photo.name}}</h3> 
</div> 

Пока здесь все нормально.

BUT У меня будет тысяча и тысячи данных для отображения. Так что мне нужно что-то вроде «бесконечного прокрутки» для фронта, а также мне нужно будет ограничить API http://localhost:3000/images диапазоном запросов или разбиением на страницы ???

Как я могу сделать что-то с много данных?

Спасибо!

ответ

0

Использовать разбиение на страницы сервера в мангусте с использованием mongoose-paginate и ограничить вывод запроса. Тот же способ включить разбивку на страницы в угловом использовании angular-ui pagination. Если вы хотите использовать бесконечный свиток, то в угловом использовании ngInfiniteScroll.

Надеюсь, это поможет.

+0

Благодаря Возьму смотреть ! – Carlos

0

Вы можете использовать API мангуст запросов для определения условий, на которых можно найти: http://mongoosejs.com/docs/queries.html

Вы можете использовать where() указать вам PAGINATION критерии, например, where({id: {$gt: page}}) (если вы используете какой-то автоинкрементным идентификатор) и limit(), чтобы указать размер вашей страницы, например, limit(10).

Каждый раз, когда вы запрашиваете у сервера дополнительную страницу, вам необходимо указать критерии по вашему URL-адресу: /images?page=1. Эти критерии должны быть увеличены на 10 при каждом получении страницы.

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

0

Чтобы ограничить данные в мангусте:

mongoose.model('Image').limit(10).exec(function(err, images){ 
    // get the images.... 
}); // this will only return 10 images 

В то время как в угловой можно использовать limitTo фильтр:

<div ng-repeat="photo in photos | limitTo: 10 "> 
    <!-- My Data List --> 
    <h3>{{photo.name}}</h3> 
</div> 

Теперь здесь вы можете узнать, как постраничные или Бесконечные прокрутки. (В Интернете есть разные темы на эту тему)

1

Возможно, вы не хотите загружать все данные сразу, если это огромная сумма. Сначала я сделал бы что-то вроде этого, ограничивая количество записей, которые вы получаете для каждого запроса.

app.get("/images", function(req, res) { 
    var query = mongoose.model('Image').find({}) 
       .limit(req.query.numberOfItems) 
       .skip(req.query.index) 

    query.exec(function (err, images) { 
     res.send(images); 
    });  
}); 
app.listen(3000); 

На клиенте вы должны затем решить динамически загружать больше данных, когда вам это нужно.

Это зависит немного от того, что вы хотите, чтобы пользовательский опыт, чтобы быть, например, имеют различные страницы и вы загружаете больше данных, как только вы откроете следующую страницу, или если пользователь прокручивает дальше вниз и т.д.

+0

Спасибо за вашу помощь! – Carlos

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