javascript - 使用 ejs 模板和 MYSQL 在 Node js 中进行服务器端分页

标签 javascript mysql node.js express ejs

由于我必须渲染大数据,并且当我进行客户端分页时,这需要时间,而且我知道服务器端分页最适合

  • 大数据集
  • 初始页面加载速度更快

但我不知道如何使用 NODE.JS EJS 和 MYSQL 进行服务器端分页,这是我的路由和.EJS

路线

app.get('/',function(req,res,next){
    req.getConnection(function(error, conn) {
        let sql = `SELECT *FROM studiestable
                   WHERE ReceivingDate >= ( CURDATE() - INTERVAL 35 DAY )       
                   ORDER BY  Bckup DESC,
                   ReceivingDate DESC`;

        conn.query(sql,function(err,rows,fields){
            if (err) {
                req.flash('error', err)
                res.render('patient/dashboard', {
                    title: 'Dashboard', 
                    data: ''
                })
            } else {
                res.render('patient/dashboard', {
                    title: 'Dashboard', 
                    data: rows
                })
            }
        })
    })
})

EJS

<table id="pattTab" class="table small">
            <tr style="background-color: rgb(122, 135, 160);color: white"> 
                <th>ID</th> 
                <th>Patient Name</th>               
                <th>Age</th>
                <th>Modality</th>                   
                <th>Images</th>                         
            </tr>
            <% if (data) { %>
                <% data.forEach(function(Patient){ %>
                    <tr>      
                        <td><%= Patient.PatientID %></td>
                        <td><%= Patient.PatientName %></td>                                   
                        <td><%= Patient.Age %></td>
                        <td><%= Patient.Modality %></td>                        
                        <td><%= Patient.Images %></td>                                                     
                    </tr>
                <% }) %>
                <% } %>        
        </table>   

最佳答案

使用 Mongoose ODM 在 NodeJS、EJS 和 MongoDB 中分页

如果您尝试进行分页,请按照以下方式进行。您的 Node.JS 文件

const ITEMS_PER_PAGE = 4;

exports.getIndex = (req, res, next) => {

    // start constants
    const page = +req.query.page || 1; // pagination
    let totalItems; // pagination
    // end constants

    Hotel.find()
    .countDocuments()
    .then(numberOfProducts => {
        totalItems = numberOfProducts;
        return Hotel.find()
                    .skip((page-1) * ITEMS_PER_PAGE)
                    .limit(ITEMS_PER_PAGE);
    }).then(hotels => {
        res.render('pages/hotel', {
            hotels: hotels,
            currentPage: page,
            hasNextPage: (ITEMS_PER_PAGE * page) < totalItems,
            hasPreviousPage: page > 1,
            nextPage: page + 1,
            previousPage: page - 1,
            lastPage: Math.ceil(totalItems / ITEMS_PER_PAGE)
        });
    }).catch(err => {
        console.log(err);
    });
}

然后按以下方式编写您的 ejs:

<body>
    <div class="jumbotron">
        <div class="container">
            <h1 class="display-4">Hotels</h1>
        </div>
    </div>
    <div class="container">
        <%if (hotels.length > 0) {%>
        <div class="row">
            <%for (let hotel of hotels) {%>
            <div class="col-sm-4">
                <div class="card mt-4" style="width: 18rem;">
                    <div class="card-body">
                        <h5 class="card-title mt-2"><%=hotel.title%></h5>
                        <p class="card-text"><%=hotel.description%></p>
                    </div>
                </div>
            </div>
            <%}%>
            <div class="container mt-4">
                <nav aria-label="Page navigation example">
                    <ul class="pagination justify-content-center">
                        <% if (hasPreviousPage) { %>
                        <li class="page-item">
                            <a class="page-link" href="?page=1">First</a>
                        </li>
                        <li class="page-item">
                            <a class="page-link" href="?page=<%= previousPage %>"><%= previousPage %></a>
                        </li>
                        <% } %>
                        <li class="page-item active">
                            <a class="page-link" href="?page=<%= currentPage %>"><%= currentPage %></a>
                        </li>
                        <% if (hasNextPage) { %>
                        <li class="page-item">
                            <a class="page-link" href="?page=<%= nextPage %>"><%= nextPage %></a>
                        </li>
                        <li class="page-item">
                            <a class="page-link" href="?page=<%= lastPage %>">Last</a>
                        </li>
                        <% } %>
                    </ul>
                </nav>
            </div>
        </div>
        <%} else {%>
        <div class="text-center">
            <h5>No products found.</h5>
            <div class="mt-4">
                <a href="/" class="btn btn-outline-primary">Go Home</a>
            </div>
        </div>
        <%}%>
    </div>
</body>

已经使用过CSS的bootstrap。

这就是你可以做到的。它将从数据库中获取一些项目并对 UI 进行分页。

关于javascript - 使用 ejs 模板和 MYSQL 在 Node js 中进行服务器端分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53555770/

相关文章:

node.js - 无法连接到树莓派上的nodejs服务器

node.js - Loopback : many-to-many relation, 无法反向

node.js - Node - 使用 axios 执行 http 请求时收到 ECONNRESET 错误

javascript - 将无序列表转换为选择...但有一个转折

php - Laravel:如何优化多个查询

php - 在 PHP 中打印一个有点复杂的 MYSQL 查询表

mysql - 大 MySQL 表,REPLACE -> 非常慢的查询

javascript - Aurelia 绑定(bind) Change.delegate 未触发(JQueryUI Datepicker)

javascript - Swift - 在 WebView 中禁用链接

javascript - 不使用全局变量的迭代函数