Как получить все данные после запроса данных поиска с помощью мангуста-разбиения на страницы?

#node.js #mongoose

Вопрос:

введите описание изображения здесьМой поиск по строке запроса в порядке, но проблема только в том, когда удаляются и отображаются все данные…:-(

Мой код здесь

 router.get('/allStudents', async (req,res) =gt; {   const limit = parseInt(req.query.limit, 4) || 4;  const page = parseInt(req.query.page, 10) || 1;   const PAGE_SIZE = 10;  const skip = (page - 1) * PAGE_SIZE;   try {   const stdID = await Student.paginate({stdID: req.query.stdID}, {limit, page,   skip}) //OK it works!!! but as its remove it wont display the whole data (data:[])   return res.status(200).json({  success: true,  data: stdID  })    } catch (err) {  console.log(err);  }   });  

Комментарии:

1. что вы удалили ?

2. Когда я ищу некоторые данные, это работает, но я удаляю поиск, и все данные не отображаются

3. добавьте некоторое условие , если вы удалите ключевое слово или переменную поиска , ваш код выполнит другой запрос MongoDB с частью соответствия {} означает все данные

Ответ №1:

добавить условие для поиска

 router.get('/allStudents', async (req,res) =gt; {   const limit = parseInt(req.query.limit, 4) || 4;  const page = parseInt(req.query.page, 10) || 1;   const PAGE_SIZE = 10;  const skip = (page - 1) * PAGE_SIZE;   try {  if (req.query.stdID.length gt;= 0){ // or (req.query.stdID!==null || req.query.stdID!== undefined)   const stdID = await Student.paginate({stdID: req.query.stdID}, {limit, page,   skip}) //OK it works!!! but as its remove it wont display the whole data (data:[])  }  else { const stdID = await Student.paginate({}, {limit, page,   skip})  return res.status(200).json({  success: true,  data: stdID  })}      } catch (err) {  console.log(err);  }   });  

Комментарии:

1. Чтобы быть уверенным, вам также следует добавить проверку, stdID существует ли она вообще, иначе вы получите «..не может прочитать длину свойства неопределенно». Но кроме этого 1 🙂

2. Я добавляю больше комментариев к своему коду , спасибо

Ответ №2:

То, что ответил @мохаммад Наими, правильно, но объяснить это с точки зрения непрофессионала … gt;

Когда вы передаете данные, вы получаете stdID req.query их ,поэтому ваш запрос mongo работает просто отлично, как вы и сказали, но когда вы удаляете все данные, он создает поле req.query.stdID null, которое вызывает ошибку, так как ее нет req.query .

вы можете передать его, как показано Мохаммедом выше, или также с помощью тернарных операторов.

let mongoQuery = req.query.stdID ? {stdID: req.query.stdID} : {} ;

и передайте mongoQuery в свою функцию разбиения на страницы.

Комментарии:

1. Но это не сработает 🙁

2. Это должно сработать, насколько я понимаю. const stdID = await Student.paginate(mongoQuery, {limit, page, skip}) возможно, вы можете проверить синтаксис еще раз, но это определенно сработает, это то же самое, что и ответ для этой темы. Просто другой подход. вам просто нужно убедиться, что вы имеете дело с req. запрос.stdID каким-то образом для обоих условий, т. е. когда он пуст И когда он не пуст.

3. хорошо, я попробую это, но не работает, спасибо за помощь

4. конечно, не беспокойтесь!

5. ДА, НАКОНЕЦ-ТО Я РЕШИЛ ЭТУ ПРОБЛЕМУ ЗА ТЕ САМЫЕ 3 дня, спасибо, что помогли мне