ראינו פעולות שעובדות על המידע ב-DB. נניח שיש לי 1000 ספרים ב-DB, אני לא רוצה למשוך את כל ה-1000 ביחד, אלא כל פעם חלק ולהציג אותו למשתמש. את זה אפשר לבצע על ידי שליחת פרמטרים ל-Url.
נניח שאנחנו רוצים לחלק את במידע לעמודים ובכל פעם לקבל עמוד אחר, נוכל להוסיף בפרמטרים את הפרמטר p עם ערך של העמוד. למשל p=1.
כדי לקבל את הערך של הפרמטר נשתמש במשתנה ה-req שאנחנו מקבלים לפונקציה. נחזור לפונקצית get ונוסיף את המשתנה pages. נשים כברירת מחדל את הערך 0 במידה ואין פרמטר על מנת לקבל את העמוד הראשון.
const page = req.query.p || 0
עכשיו צריכים להחליט כמה רשומות יהיו בעמוד, מכיוון שאין לנו הרבה רשומות נניח שבכל עמוד אנחנו רוצים 3 רשומות.
נצטרך לקחת את מספר העמוד, להכפיל אותו במספר הרשומות לעמוד ולדלג לרשומה המתאימה. למשל אם יש 10 בעמוד ואני רוצה את עמוד 2, אז ניקח 2*10 שזה 20, נדלג 20 רשומות ונגיע לרשומות 21-30.
פונקציית get נראית ככה עכשיו.
app.get('/books', (req, res) => {
const page = req.query.p || 0
const booksPerPage = 3
let books = []
db.collection('books')
.find()
.sort({ author: 1 })
.skip(page * booksPerPage)
.limit(booksPerPage)
.forEach(book => books.push(book))
.then(() => {
res.status(200).json(books)
})
.catch(() => {
res.status(500).json({ error: "No data fetching"})
})
})
אם נקרא לכתובת http://localhost:3000/books נקבל את העמוד הראשון של הספרים. בכתובת http://localhost:3000/books/?p=1 נקבל את העמוד השני וכן הלאה.