Implement Pagination in the Controller
Update the getAllUsers controller to read pagination parameters from req.query.
Always validate query parameters because query values arrive as strings.
We will use sensible defaults and a maximum page size to prevent excessively large requests.
Paginated Users Controller
export async function getAllUsers(req, res, next) {
try {
const page = Math.max(1, Number.parseInt(req.query.page, 10) || 1);
const requestedLimit = Number.parseInt(req.query.limit, 10) || 10;
const limit = Math.min(100, Math.max(1, requestedLimit));
const result = await userService.getUsers({
page,
limit
});
res.status(200).json({
success: true,
data: result.users,
pagination: {
total: result.total,
page: result.page,
limit: result.limit,
totalPages: result.totalPages,
hasNextPage: result.page < result.totalPages,
hasPreviousPage: result.page > 1
}
});
} catch (error) {
next(error);
}
}Parses pagination query parameters, enforces a maximum limit, and returns records with pagination metadata.
Key Takeaways
Query parameters are accessed through req.query.
Set sensible defaults for pagination.
Enforce a maximum page size.