Setting Up the Project
Before you begin, make sure you have Node.js and MongoDB installed on your system. You can create a new project folder and initialize it with npm
or yarn
.
mkdir node-pagination
cd node-pagination
npm init -y
Next, install the necessary dependencies:
npm install express mongoose
Creating the Express Application
Create an app.js
file and set up your Express application:
const express = require('express'); const m
const app = express();
// Connect to MongoDB
mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => {
console.log('Connected to MongoDB');
});
app.use(express.json());
// Define your Mongoose model and schema here
const BlogPost = mongoose.model('BlogPost', {
title: String,
content: String,
date: Date
});
// Set up your routes for pagination
app.get('/posts', async (req, res) => {
const page = parseInt(req.query.page) || 1; // Get the page number from the query parameter
const perPage = 10; // Number of items per page
const skip = (page - 1) * perPage;
const totalPosts = await BlogPost.countDocuments();
const totalPages = Math.ceil(totalPosts / perPage);
const posts = await BlogPost.find().skip(skip).limit(perPage);
res.json({ posts, totalPages, currentPage: page });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Using Pagination in Your Routes
In this example, we've set up a basic Express application with a MongoDB database using Mongoose. We created a BlogPost
model and added a route for /posts
. When users access this route, they can pass a page
query parameter to view different pages of blog posts.
The route retrieves the page number from the query parameter and calculates the skip
value to determine how many documents to skip in the database. It then uses the limit
method to fetch a specific number of documents per page.
Making the Route SEO-Friendly
To make the route SEO-friendly, you can customize the meta title and description for each page by including the current page number and a relevant keyword. This can help search engines index and rank your paginated content more effectively.
app.get('/posts', async (req, res) => {
const page = parseInt(req.query.page) || 1;
const perPage = 10;
const skip = (page - 1) * perPage;
const totalPosts = await BlogPost.countDocuments();
const totalPages = Math.ceil(totalPosts / perPage);
const posts = await BlogPost.find().skip(skip).limit(perPage);
// SEO Title and Description
const title = `Page ${page} - My Awesome Blog`; const descripti the latest posts on My Awesome Blog - Page ${page}`;
res.json({ posts, totalPages, currentPage: page, seo: { title, description } });
});
Conclusion
Implementing simple pagination in your Node.js and Express application using Mongoose is essential for improving the user experience and optimizing server performance, especially when dealing with large datasets. Make sure to use SEO best practices to enhance the discoverability of your paginated content by search engines.