Node+Express写分页接口

文章详细描述了如何使用Express框架和router.js创建API接口,从数据库中获取文章列表并实现分页功能,同时利用Element-Plus组件库管理前端分页效果。
摘要由CSDN通过智能技术生成

后端逻辑

router.js文件

const express = require('express');
const router = express.Router();

//导入函数处理,数据
const articleMessage = require('../router_handle/artcle')

//文章列表
router.get('/list',articleMessage.articleList)


module.exports = router;

router_handle.js

const db = require('../db/index')
//选择指定要连接的数据库
db.changeUser({ database: "page" }, (err) => {
    if (err) throw err;
});
// 获取文章列表 -- 分页
exports.articleList = (req, res) => {
    const { page, pageSize } = req.query; // 获取前端传递的page和pageSize参数  
    //查看总有多少条数据
    const articleSqlTotal = `select * from article ` //按照id排序,返回列表
    //总条数
    var total = 0
    db.query(articleSqlTotal, (err, result) => {
        if (err) return res.send({ code: 0, msg: err.message })
        total = result.length
    })
    // 构建分页查询语句  
    //const articleSql = `SELECT * FROM article ORDER BY id LIMIT ${pageSize} OFFSET ${(page - 1) * pageSize}`;
    const articleSql = `SELECT * FROM article ORDER BY id LIMIT ${pageSize}  OFFSET ${(page - 1) * pageSize}`;

    db.query(articleSql, (err, result) => {
        if (err) return res.send({ code: 0, msg: err.message });

        res.send({ code: 1, data: result, msg: '获取成功!', total: total });
    });
};

前端页面

使用组件库element-plus组件的分页器

<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" @prev-click="getList()" @next-click="getList()" background v-model:page-size="pageSize" v-model:current-page="page"
      layout="prev, pager, next,sizes" :total="total" />

处理方法

 data() {
    return {
      total: 0,
      page: 1,
      pageSize: 10,
    };
  },
methods:{
    //这个是监听到一页展示多少条数据的控制监听函数
    handleSizeChange(val) {
      this.pageSize = val;
      this.getList();
    },
    //这个是监听点击哪一页就跳转到哪一页的监听函数
    handleCurrentChange(number){
      this.page = number;
      this.getList()
    },
    //调用分页传参,也可直接传一个对象,例如queryparams:{},直接将queryparams传入其中
    getList() {
      ArticleListApi({
        page: this.page,
        pageSize: this.pageSize,
      }).then((res) => {
        if (res.data.code == 1) {
          this.tableData = res.data.data;
          this.total = res.data.total;
        }
        if (res.data.code == 401) {
          this.$message({
            type: "error",
            message: res.data.msg,
            duration: 1000,
            onClose: () => {
              router.replace("/login");
            },
          });
        }
      });
    },
}

以下是一个基于 Node.jsExpress 和 EJS 模板引擎的分页查询示例: 1. 安装依赖 首先需要安装 Node.jsExpress,以及 EJS 模板引擎和 body-parser 中间件: ``` npm install express ejs body-parser --save ``` 2. 创建项目 在项目目录下创建 app.js 文件,并添加以下代码: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const ejs = require('ejs'); const app = express(); const port = 3000; // 设置模板引擎 app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); // 解析请求体 app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); // 数据列表 const data = [ { id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 21 }, { id: 3, name: '王五', age: 22 }, { id: 4, name: '赵六', age: 23 }, { id: 5, name: '钱七', age: 24 }, { id: 6, name: '孙八', age: 25 }, ]; // 分页查询 app.get('/list', (req, res) => { // 每页显示的数量 const pageSize = 2; // 当前页码 const currentPage = req.query.page || 1; // 计算总页数 const totalPage = Math.ceil(data.length / pageSize); // 获取当前页的数据 const start = (currentPage - 1) * pageSize; const end = start + pageSize; const list = data.slice(start, end); res.render('list', { list, currentPage, totalPage }); }); // 监听端口 app.listen(port, () => { console.log(`Server is running on ${port}`); }); ``` 3. 创建 EJS 模板 在 views 目录下创建 list.ejs 文件,并添加以下代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>分页查询</title> </head> <body> <table> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> </tr> <% for(let i = 0; i < list.length; i++) { %> <tr> <td><%= list[i].id %></td> <td><%= list[i].name %></td> <td><%= list[i].age %></td> </tr> <% } %> </table> <div> <% if(currentPage > 1) { %> <a href="/list?page=<%= currentPage - 1 %>">上一页</a> <% } %> <% if(currentPage < totalPage) { %> <a href="/list?page=<%= parseInt(currentPage) + 1 %>">下一页</a> <% } %> </div> </body> </html> ``` 4. 运行项目 在项目目录下执行以下命令启动项目: ``` node app.js ``` 打开浏览器,访问 http://localhost:3000/list 即可看到分页查询的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦逼的猿宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值