Express ejs with mongoose pagination

var express = require('express');
var Bodyperser = require('body-parser');
var mongoose = require('mongoose');
var path = require('path');
var ejs = require('ejs');

app.listen(3002, function () {
    console.log('Server started on port 3001')
})

app.get('/users/:page', function(req, res, next) {
    var perPage = 1
    var page = req.params.page || 1

    User
        .find({})
        .skip((perPage * page) - perPage)
        .limit(perPage)
        .exec(function(err, users) {
            User.count().exec(function(err, count) {
                if (err) return next(err)
                res.render('home/indexp', {
                    users: users,
                    current: page,
                    pages: Math.ceil(count / perPage)
                })
            })
        })
})

home/indexp.ejs
 
<div class="container">
    <h2> User List</h2>
    <table class="table table-bordered">
        <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">Name</th>
            <th scope="col">Email</th>
            <th scope="col">Action</th>
        </tr>
        </thead>
        <tbody>
        <% var i=1        users.forEach(function(user){  %>
        <tr>
            <th scope="row"><%= i %></th>
            <td><%= user.fullname %></td>
            <td><%= user.email %></td>
            <td><a class="btn btn-primary" href="/user/edit/<%= user._id %>" role="button">Edit</a> <a class="btn btn-danger" href="/user/delete/<%= user._id %>" role="button">Delete</a> </td>
        </tr>
        <% i++ }); %>

        </tbody>
    </table>
    <% if (pages > 0) { %>
    <nav aria-label="Page navigation example">
        <ul class="pagination">
            <% if (current == 1) { %>
                <li class="page-item disabled"><a class="page-link">First</a></li>
            <% } else { %>
                <li class="page-item"><a class="page-link" href="/users/1">First</a></li>
            <% } %>
            <% var i = (Number(current) > 5 ? Number(current) - 4 : 1) %>
            <% if (i !== 1) { %>
                <li class="page-item disabled"><a class="page-link">...</a></li>
            <% } %>
            <% for (; i <= (Number(current) + 4) && i <= pages; i++) { %>
                <% if (i == current) { %>
                    <li class="page-item active"><a class="page-link"><%= i %></a></li>
                <% } else { %>
                    <li class="page-item"><a class="page-link" href="/users/<%= i %>"><%= i %></a></li>
                <% } %>
                <% if (i == Number(current) + 4 && i < pages) { %>
                    <li class="page-item disabled"><a class="page-link">...</a></li>
                <% } %>
            <% } %>
            <% if (current == pages) { %>
                <li class="page-item disabled"><a class="page-link">Last</a></li>
            <% } else { %>
                <li class="page-item"><a class="page-link" href="/users/<%= pages %>">Last</a></li>
            <% } %>
        </ul>
    </nav>
    <% } %>

</div>

Comments

Popular posts from this blog

React Context API (Hooks and Classes)

React Filter