前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >koa 实现一个翻页查询

koa 实现一个翻页查询

作者头像
用户4793865
发布2023-01-12 16:28:16
7920
发布2023-01-12 16:28:16
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

今天的分享是基于我封装的框架开发的。 我的框架地址:https://gitee.com/yang-yiming1234/koa

操作数据库需要用到 sequelize

创建model

user_detail.model.js

代码语言:javascript
复制
// 数据类型
const { DataTypes } = require('sequelize')
const seq = require('../db/seq')

// 创建模型   UserDetail是表名
const UserDetail = seq.define('UserDetail', {
    user_id:{
        // 整形数据类型
        type: DataTypes.INTEGER,
        // 是否允许为空
        allowNull: false,
        // 默认值
        defaultValue: 0,
        // 备注
        comment: '用户编号',
        // 是否唯一
        unique: true,
    },
    phone:{
        //字符串类型
        type: DataTypes.STRING,
        allowNull: true,
        comment: '手机号'
    },
    job:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '职业'
    },
    tag:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '标签'
    },
    signature:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '座右铭'
    },
    email:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '邮箱'
    }

})
// force如果之前存在这张表 会删了重建 文档:模型重建  用过后要注释掉
// node src/model/user.model.js 创建数据库表
// UserDetail.sync({ force: true })

module.exports = UserDetail

UserDetail.sync({ force: true })注释放开。执行命令node src/model/user_detail.model.js创建数据库表。创建完后,再进行注释。否则会将表删除再建新表。其实 UserDetail.sync({ force: true })就相当于 执行了删除表语句,再执行创建表语句。

创建成功的话,在数据库中可以看到生成了相应的表。

router路由

manage.route.js

代码语言:javascript
复制
// 引入包
const Router = require('koa-router')
// 引入controller我们下面写
const { getUserManage } = require('../controller/manage.controller')
// 访问这个文件下的接口,都需要加一个前缀 /manage
const router = new Router({prefix:'/manage'})
// 我们的接口,请求方式是get  我们访问接口路径   /manage/getUserManage
router.get('/getUserManage', getUserManage),
// 导出
module.exports = router

controller

manage.controller.js

  • 获取前端查询条件,如果没有查询条件,都给个默认值''
  • 调用相应的service,去获取数据。
  • 最后将数据返回
代码语言:javascript
复制
// 引入service
const { usermanage } = require('../service/usermanage.service')
class ManageController {
    async getUserManage(ctx, next) {
        // 1.获取数据
        const { username = '', is_admin = '', createdAt = '', updatedAt = '', currentPage = 1, pageSize = 10 } = ctx.request.query
        console.log(username, is_admin, createdAt, updatedAt, currentPage, pageSize)
        // 2.操作数据库
        try {
            // 调用service层最好加try catch
            const res = await usermanage({ username, is_admin, createdAt, updatedAt, currentPage, pageSize })
            res.currentPage = currentPage
            res.pageSize = pageSize
            // 3.返回给客户端
            ctx.body = {
                code: 1000,
                data: res
            }
        } catch (err) {
            console.log(err)
            ctx.app.emit('error', userRegisterError, ctx)
        }

    }
}

// 导出实例化的对象
module.exports = new ManageController()

service

usermanage.service.js

  • 整个文件是一个类,而每个service的方法是一个函数。
  • 定义一个对象用于存储查询条件
  • 如果查询条件存在将查询条件插入where对象中。[Op.like] 是模糊查询

分页

findAndCountAll是对应的分页方法。 count, rows分别是数据条数和具体的数据。

limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据

offset: (currentPage - 1) * pageSize,

limit: Number(pageSize),

代码语言:javascript
复制
const User = require('../model/user.model')
const { Op } = require("sequelize");
class UserManageService {
    // 查询所有用户
    async usermanage({ username, is_admin, createdAt, updatedAt, currentPage, pageSize }) {
        const where = {};
        username && (where['username'] = {
            [Op.like]: username
        })
        is_admin && (where['is_admin'] = {
            [Op.eq]: is_admin
        })
        createdAt && (where['createdAt'] = {
            [Op.like]: createdAt
        })
        updatedAt && (where['updatedAt'] = {
            [Op.like]: createdAt
        })
        const { count, rows } = await User.findAndCountAll({
            where,
            offset: (currentPage - 1) * pageSize,
            limit: Number(pageSize),
        });
        return rows ? { rows, count } : { error: 500 }
    }
   
}
// 导出后 在控制器controller中使用
module.exports = new UserManageService()

测试

最后在没有前端的时候,我们可以在postman中进行测试。

image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建model
  • router路由
  • controller
  • service
    • 分页
    • 测试
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档