Пагинация не возвращает правильное количество записей - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть API, и я реализовал нумерацию страниц в этом. Я должен дать ответ в этом формате

    "status": "Success",
    "message": "data found",
    "totalPages": 2,
    "currentPage": "1",
    "data": [
        {
       .....

Поэтому мне нужно отобразить общее количество страниц и текущую страницу. 10 записей на странице. Есть две таблицы: одна - пользователи, где я веду историю активности пользователей, а вторая - чат. Я должен получить все чаты пользователя и найти последнюю запись по этому чату. Чтобы добиться этого, я делаю следующее

  var query = {}
  var count = 0
  var page = 1
  var pageSize = 10

  if (req.query.page) {
    console.log("page : ", page);
      page = req.query.page
      query.skip = pageSize * (page - 1)
  }

  query.limit = pageSize

User.distinct("chatId", {userEmail:  req.params.senderEmail }, async function(err, chat){
      if(chat){
         for(var i = 0; i < chat.length;i++){
          var chats = await Chat.find({ chatId: chat[i] },{}, query).sort('-_id').limit(1).exec();
          if(chats){
              count++;
              if(typeof(chats)  === 'object'){ 
                  if(JSON.stringify(chats) !== '{}' || JSON.stringify(chats) !== '[]'){
                    chatList.push(chats);
                  }
              }
          }
        }
        console.log("count is : ", count);
        count = count/10;
        if(count<1){
          count = 1;
        }
        count = Math.round(count) 
        console.log("count after calculation : ", count);

        res.json({
            status: "Success",
            message: "data found",
            totalPages: count,
            currentPage: page,
            data: chatList
        }); 
      }
  });

Ниже приведены консоли

page:  1
count is:  20
count after calculation:  2

Теперь проблема в том, что вместо получения 10 записей на одной странице я получаю все записи (20) на стр. 1. Подскажите, пожалуйста, где я не прав?

1 Ответ

0 голосов
/ 20 апреля 2020

Я решил проблему, сохранив результат запроса Chat.find в массиве, поэтому рассматриваемый chat.find изменился на следующий.

Chat.find({ chatId: chat[i] }).sort('-_id').limit(1).exec();

, затем я реализовал разбиение на страницы в массиве.

 if(query.skip >= 0){
   pageLimit = (query.limit) * (page)
   }
 res.json({
            status: "success",
            message: "data found",
            totalPages: count,
            currentPage: page,
            data: chatList.slice(query.skip, pageLimit)
        }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...