#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 дня, спасибо, что помогли мне