koa+Sequelize进行get,post,delete,put,all操作

简介: koa+Sequelize进行get,post,delete,put,all操作

koa如何进行常见请求操作


1.get传值接受


请求参数放在 URL 后面


url = 'http://localhost:3000/home?id=12&name=ikcamp'
router.get("/admin/get", async (ctx) => {
      let ctx_query = ctx.query;
      console.log("99", ctx_query); --{ id: '12', name: 'ikcamp' }
})


url后面跟一个单独的参数


url = 'http://localhost:3000/home/12'
router.get("/users/:id", async (ctx) => {
    console.log(ctx.params) ---{ id: '12' }
        //const { id } = ctx.params
        ctx.body = `获取id为${id}的用户`;
})


请求参数放在 URL 中间


url = 'http://localhost:3000/home/12/ikcamp'
// 增加如下代码
router.get('/home/:id/:name', async(ctx, next)=>{
    console.log(ctx.params) -- { id: '12', name: 'ikcamp' }
})


2.post传值接受


安装 koa-bodyparser
npm install koa-bodyparser --save
使用
const bodyParser = require("koa-bodyparser");
const app = new Koa();
app.use(bodyParser()); --要在路由之前加入
const router = new Router();
请求参数在body之中
router.post("/admin/pot", async (ctx) => {
  let query = ctx.request.body; --接受post传值;
  console.log("99", ctx_query);
})


3.detel传值接受


router.del("/test/deleate", async (ctx, next) => {
  let query = ctx.query;  --获取传的数值
})
router.del("/users/:id", async (ctx) => {
   const { id } = ctx.params
   ctx.body = `删除id为${id}的用户`;
      })


4.put传值接受


router.put("/users/:id", async (ctx) => {
    const { id } = ctx.params
    ctx.body = `修改id为${id}的用户`;
})


5. all请求传值--会匹配所有的请求方式


router.all("/users/:id", async (ctx) => {
    ctx.body = ctx.params;
});


koa使用Sequelize操作数据库


如何进行分页查询


1、分页模糊精准查询


const Sequelize = require("sequelize");
const Op = Sequelize.Op;
const blogPageList = await Blog.findAll({
    order: [
      ['id', 'desc']                     --通过哪些字段排序
    ],
    where:{
  userId: 1,             --精准查询
  brand: {  //brand模糊查询的字段
       [Op.like]: `%${keyword}%`   --模糊查询
      }
    },
    limit: pageSize,             --每页限制多少条
    offset: (currentPage-1)*pageSize     --从多少开始
  })


2、联表查询


const { User, Blog } = require('./model')
const blogListWithUser = await Blog.findAndCountAll({
    order: [
      ['id', 'desc']
    ],
    include: [                              --包含联表查询的信息
      {
        model: User,
        attributes: ['userName', 'nickName'],
        where: {
          userName: 'zj'
        }
      }
    ]
  })
  console.log('blogListWithUser: ',
  blogListWithUser.count,
  blogListWithUser.rows.map(blog => {
    const blogVal = blog.dataValues
    blogVal.user = blogVal.user.dataValues
    return blogVal
  })
  )


3、联表查询2


const userListWithBlog = await User.findAndCountAll({
    attributes: ['userName', 'nickName'],
    include: [
      {
        model: Blog
      }
    ]
  })
  console.log('userListWithBlog: ',
  userListWithBlog.count,
  userListWithBlog.rows.map(user => {
    const userVal = user.dataValues
    userVal.blogs = userVal.blogs.map(blog => blog.dataValues)
    return userVal
  })
  )


Sequelize.Op操作符


Sequelize 可用于创建更复杂比较的符号运算符 -


const Op = Sequelize.Op
[Op.and]: {a: 5}           // 且 (a = 5)
[Op.or]: [{a: 5}, {a: 6}]  // (a = 5 或 a = 6)
[Op.gt]: 6,                // id > 6
[Op.gte]: 6,               // id >= 6
[Op.lt]: 10,               // id < 10
[Op.lte]: 10,              // id <= 10
[Op.ne]: 20,               // id != 20
[Op.eq]: 3,                // = 3
[Op.not]: true,            // 不是 TRUE
[Op.between]: [6, 10],     // 在 6 和 10 之间
[Op.notBetween]: [11, 15], // 不在 11 和 15 之间
[Op.in]: [1, 2],           // 在 [1, 2] 之中
[Op.notIn]: [1, 2],        // 不在 [1, 2] 之中
[Op.like]: '%hat',         // 包含 '%hat'
[Op.notLike]: '%hat'       // 不包含 '%hat'
[Op.iLike]: '%hat'         // 包含 '%hat' (不区分大小写)  (仅限 PG)
[Op.notILike]: '%hat'      // 不包含 '%hat'  (仅限 PG)
[Op.regexp]: '^[h|a|t]'    // 匹配正则表达式/~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.notRegexp]: '^[h|a|t]' // 不匹配正则表达式/!~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.iRegexp]: '^[h|a|t]'    // ~* '^[h|a|t]' (仅限 PG)
[Op.notIRegexp]: '^[h|a|t]' // !~* '^[h|a|t]' (仅限 PG)
[Op.like]: { [Op.any]: ['cat', 'hat']} // 包含任何数组['cat', 'hat'] - 同样适用于 iLike 和 notLike
[Op.overlap]: [1, 2]       // && [1, 2] (PG数组重叠运算符)
[Op.contains]: [1, 2]      // @> [1, 2] (PG数组包含运算符)
[Op.contained]: [1, 2]     // <@ [1, 2] (PG数组包含于运算符)
[Op.any]: [2,3]            // 任何数组[2, 3]::INTEGER (仅限PG)
[Op.col]: 'user.organization_id' // = 'user'.'organization_id', 使用数据库语言特定的列标识符, 本例使用 PG


相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
小程序 开发者
微信小程序:引入工具库lodash
微信小程序:引入工具库lodash
1556 0
微信小程序:引入工具库lodash
|
编解码 算法 ice
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
1164 0
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
|
11月前
|
资源调度 运维 JavaScript
使用electron创建桌面应用及常见打包错误解决
使用electron创建桌面应用及常见打包错误解决
1221 3
|
存储 关系型数据库 数据库
SQLite 与 PostgreSQL:详细比较
【8月更文挑战第13天】
963 4
|
10月前
|
移动开发 Unix Linux
拉取代码编辑器中报错`Delete ␍ prettier/prettier` 问题的解决方案
通过正确配置Prettier、EditorConfig文件和编辑器设置,可以有效解决 `Delete ␍ prettier/prettier`的问题。这不仅能避免频繁的格式化错误,还能确保团队成员在不同开发环境下的代码风格一致,提升项目的代码质量和可维护性。按照上述解决方案调整配置后,您的项目将更加规范,代码也会更具一致性。
942 4
|
11月前
|
前端开发 JavaScript API
2025年前端框架是该选vue还是react?有了大模型-例如通义灵码辅助编码,就不用纠结了!vue用的多选react,react用的多选vue
本文比较了Vue和React两大前端框架,从状态管理、数据流、依赖注入、组件管理等方面进行了详细对比。当前版本和下载量数据显示React更为流行,但Vue在国内用户量增长迅速。Vue 3通过组合式API提供了更灵活的状态管理和组件逻辑复用,适合中小型项目;React则更适合大型项目和复杂交互逻辑。文章还给出了选型建议,强调了多框架学习的重要性,认为技术问题已不再是选型的关键,熟悉各框架的最佳实践更为重要。
6726 1
|
小程序 JavaScript
微信小程序中的页面跳转(通过点击按钮、调用方法的形式)
这篇文章讲解了微信小程序中页面跳转的方法,包括使用按钮点击事件和调用方法实现跳转,以及推荐使用`this.pageRouter.navigateTo`代替`wx.navigateTo`的方式。
微信小程序中的页面跳转(通过点击按钮、调用方法的形式)
|
运维 Kubernetes Serverless
阿里云Serverless产品简介
Serverless 应用引擎SAE(Serverless App Engine)是一个全托管、免运维、高弹性的通用PaaS平台,支持Spring Cloud、Web应用、ElasticJob任务等全托管,零改造迁移、无门槛容器化,提供了开源侧诸多增强能力和企业级高级特性。换句话说,SAE是应用 Serverless 化的良好实践。
390 2
|
Dart
Flutter笔记:手动配置VSCode中Dart代码自动格式化
Flutter笔记:手动配置VSCode中Dart代码自动格式化
1398 5
|
JavaScript 前端开发 API
vue改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
vue改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
427 2

热门文章

最新文章