nodejs mysql 实现分页

本文介绍了一个使用Node.js中的Express框架结合MySQL实现的简单分页查询功能。通过解析请求参数确定当前页数和每页显示的数据量,从数据库中获取相应记录,并传递给视图进行渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下

var express = require('express');
var router = express.Router();
var settings = require('../settings.js');
var mysql = require('mysql2');

router.get('/'function(reqresnext) {
    var current_page = 1//默认为1
    var num = 9//一页条数
    if (req.query.page) {
        current_page = parseInt(req.query.page);
    }

    var last_page = current_page - 1;
    if (current_page <= 1) {
        last_page = 1;
    }
    var next_page = current_page + 1;
    var str = 'SELECT left(paragraph,50) as paragraph,date,id FROM notice limit ' + num + '  offset ' + num * (current_page - 1);
    var conn = mysql.createConnection(settings.db);

    conn.connect();
    conn.query(str, function(errrowsfields) {
        if (err) {
            req.flash('error''数据查询有误');
        }
        if (!err) {
            if (!rows[0]) {
                req.flash('error''已到最后一页,请返回');
            }
            res.render('notice', {
                last_page: last_page,
                next_page: next_page,
                current_page: current_page,
                mes: rows,
                error: req.flash('error').toString()
            });

        }
    });
    conn.end();
});

module.exports = router;

### 实现分页查询 在 Node.js 中实现分页查询可以通过多种方式完成,具体取决于所使用的数据库和驱动程序。 对于 MongoDB 数据库,可以使用原生的 `mongodb` 驱动程序或者 Mongoose 库来进行分页操作[^2]。当采用原生驱动时,通常会通过设置 `skip()` 和 `limit()` 方法来控制返回的数据条目数量及其起始位置: ```javascript const MongoClient = require('mongodb').MongoClient; async function findDocuments(page, limit) { const uri = 'your_mongodb_connection_string'; let client; try { client = await MongoClient.connect(uri); const collection = client.db('test').collection('documents'); const skipCount = (page - 1) * limit; const cursor = collection.find().skip(skipCount).limit(limit); const documents = await cursor.toArray(); console.log(documents); } catch(error){ throw error; } finally{ if(client){ await client.close(); } } } ``` 而对于关系型数据库如 MySQL,则可通过 SQL 查询中的 LIMIT 子句配合 OFFSET 来达到相同效果[^3][^5]。下面是一个基于 Sequelize ORM 的例子,在这里定义了一个简单的 API 路由用于获取带有分页参数的文章列表: ```javascript // 导入必要的模块 const express = require('express'); const { Article } = require('./models'); const app = express(); app.get('/articles', async(req, res) => { const page = parseInt(req.query.page || 1); // 默认第一页 const pageSize = parseInt(req.query.pageSize || 10); // 每页显示记录数,默认十条 try { const result = await Article.findAndCountAll({ offset: (page - 1) * pageSize, limit: pageSize, order: [['createdAt', 'DESC']] // 可选:按创建时间降序排列 }); res.json({ total: result.count, articles: result.rows.map(article => article.toJSON()) }); } catch(err) { console.error(err.message); res.status(500).send('Server Error'); } }); module.exports = app; ``` 上述代码片段展示了两种不同类型的数据库上执行分页查询的方式。无论是哪种情况,都建议开发者考虑性能优化措施,比如索引的应用、合理调整每页大小等,以确保应用能够高效处理大量数据请求。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值