Sequelize的拓展

前言

基于上一篇Sequelize的基本操作后的一些补充扩展

一.分页查询

在查看详情的接口中进行整改

router.get('/', async function (req, res, next) {try {const query = req.queryconst currentPage = Math.abs(Number(query.currentPage)) || 1const pageSize = Math.abs(Number(query.pageSize)) || 10const offset = (currentPage - 1) * pageSizeconst condition = {order: [['id', 'DESC']],limit: pageSize,offset: offset}if (query.title) {condition.where = {title: {[Op.like]: `%${query.title}%`}}}const { count, rows } = await Article.findAndCountAll(condition)res.json({code: 200,message: "查询成功",data: {articles: rows,pagination: {total: count,currentPage,pageSize}}});} catch (error) {res.status(500).json({code: 500,message: "查询失败",errors: [error.message]})}});

二.参数过滤 

在更新数据的接口上进行整改

function filterBody(req) {return {title: req.body.title,content: req.body.content}
}router.put('/:id', async function (req, res, next) {try {const { id } = req.paramsconst article = await Article.findByPk(id)if (article) {const body = filterBody(req)await Article.update(body)res.json({status: true,message: "更新成功",data: article})} else {res.status(404).json({code: 404,message: "查询不到信息"})}}catch (error) {res.status(500).json({code: 500,message: "删除失败",errors: [error.message]})}
})

三.验证表单数据 

在models\article.js修改

'use strict';
const {Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {class Article extends Model {/*** Helper method for defining associations.* This method is not a part of Sequelize lifecycle.* The `models/index` file will call this method automatically.*/static associate(models) {// define association here}}Article.init({// title: DataTypes.STRING,//表单内容验证title:{ type:DataTypes.STRING,allowNull:false,validate:{notNull:{msg:"标题必须存在"},notEmpty:{msg:"标题不为空"},len:{args:[2,45],msg:"标题长度需要在2-45个字符之间"}}},content: DataTypes.TEXT}, {sequelize,modelName: 'Article',});return Article;
};

在routes\admin\articles.js使用

router.post('/', async function (req, res, next) {try {const article = await Article.create(body)res.status(200).json({code: 200,message: "新增成功",data: article})}catch (error) {if (error.name === 'SequelizeValidationError') {const errors = error.errors.map(e => e.message)res.status(400).json({code: 400,message: "请求参数错误",errors})} else {res.status(500).json({code: 500,message: "新增失败",errors: [error.message]})}}
})

四.封装代码

新建一个utils文件夹,并新增一个response.js

/*** 自定义404*/
class NotFoundError extends Error {constructor(message) {super(message);this.name = "NotFoundError"}
}
/*** 请求成功*/function success(res, message, data, code) {res.status(code).json({code: code,message,data})
}/*** 请求失败*/function fail(res, error) {if (error.name === 'SequelizeValidationError') {const errors = error.errors.map(e => e.message)return res.status(400).json({code: 400,message: "请求参数错误",errors})}if (error.name === 'NotFoundError') {return res.status(404).json({code: 404,message: "资源不存在",errors: [error.message]})}res.status(500).json({code: 500,message: "服务器错误",errors: [error.message]})
}module.exports = {NotFoundError,success,fail
}

在routes\admin\articles.js使用

const { NotFoundError, success, fail } = require('../../utils/response')/*** 公共方法:查询当前文章*/
async function getArticle(req,) {const { id } = req.paramsconst article = await Article.findByPk(id)if (!article) {throw new NotFoundError(`ID:${id}的文章未找到`)}return article
}router.get('/:id', async function (req, res, next) {try {const article = await getArticle(req)res.json({code: 200,message: "查询成功",data: article});success(res, "查询成功", article)} catch (error) {fail(res, error)}
})

总结

以上内容皆是在上一篇Sequelize入门及简单的增删改查-CSDN博客基础上进行拓展,如想要更好了解这些内容,需要先看上一篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[XYCTF新生赛2024]-PWN:ptmalloc2 it‘s myheap plus解析(glibc2.35,堆中的栈迁移,orw)

查看保护 查看ida 思路: 泄露libc和堆地址就不多说了,fastbin duf也不解释了。这里主要是利用fastbin duf在environ附近创建堆块,泄露environ中的栈地址,然后就利用fastbin duf修改rbp和返回地址进行栈迁移了,迁移目标…

优化Docker部署:解决Java应用ExcelGenerateException并提速镜像构建

在开发和部署应用时,经常会遇到在本地环境运行正常,但迁移到Docker容器后出现特定错误的情况。本篇博客将聚焦于解决一个具体问题:当使用Docker部署包含Excel生成功能的Java应用程序时,遇到ExcelGenerateException的排查与解决方法…

Android SurfaceFlinger——注册监听底层调用(八)

通过上一篇文章的分析,能够发现其实 registerCallback 在 HWC2On1Adapter(也是 hwc2_device_t)中做的事情仅仅只是把当前的方法指针和回调类型存储起来,同时让刚注册进来的监听消费掉还没有回调上去的消息。其实真正从硬件回调上来的地方其实是 HWC2On1Adapter::Callback 中…

Xcode安装Simulator失败问题解决方法

Xcode安装Simulator_Runtime失败,安装包离线安装保姆级教程 Xcode更新之后有时候会提示要安装模拟器运行时环境,但是用Xcode更新会因为网络原因,我觉得基本上就是因为苹果服务器的连接不稳定导致的,更可气的是不支持断点续…

数据结构与算法笔记:高级篇 - 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?

概述 上篇文章我们讲到,如何用位图、布隆过滤器,来过滤重复数据。本章,我们再讲一个跟过滤相关的问题,如果过滤垃圾短信? 垃圾短信和骚扰电话,我想每个人都收到过吧?买房、贷款、投资理财、开…

第十六章:基于开源大模型使用huggingface在deepspeed与accelerator下继承源码权重保存而实现resume与infer

文章目录 前言一、huggingface的_save_checkpoint函数不同阶段保存内容介绍1、_save_checkpoint函数2、save_model函数3、_save函数4、save_pretrained函数5、resume说明二、模型训练Resume相关内容重载1、Resume的一次性权重载入(deepspeed_load_checkpoint)2、Resume的optimi…

Git 冲突处理指南:恢复 Git Reset

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

【Liunx-后端开发软件安装】Liunx安装FDFS并整合nginx

【Liunx-后端开发软件安装】Liunx安装nacos 文章中涉及的相关fdfs相关软件安装包请点击下载: https://download.csdn.net/download/weixin_49051190/89471122 一、简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括…

黑马点评06短信登录-用户请求和会话管理过程

用户请求发送: 用户的浏览器向服务器发送请求(例如,访问网页或提交表单)。请求头包含之前存储在浏览器中的Cookie,其中包括会话ID(Session ID)。 服务器接收请求: 服务器接收到用户的…

杭州代理记账报税全程托管专业实力全面指南

杭州代理记税报税服务可以为企业提供全程托管财务管理解决方案,确保企业的财务工作专业、高效、合规。以下是杭州代理记税报税服务全面指南: https://www.9733.cn/news/detail/185.html 一、代理记账报税服务的内容 基础服务: 每日记&#xf…

震坤行旗下安丹达坚持研发创新 助力企业实现安全生产

震坤行旗下安丹达坚持研发创新 助力企业实现安全生产 前不久,在上海新国际博览中心隆重召开了第106届劳保会,震坤行旗下安丹达作为展商首次亮相劳保会(展位:E4馆4F-02)。中国劳动保护用品交易会是由1966年开始举办的全…

Python-井字棋

井字棋 1.设计登录界面1.1导入需要的工具包1.2窗口显示1.3登录界面图片显示1.6标签按钮输入框显示 2.登录功能实现2.1用户数据存储 2.2登录和注册2.2.1登录功能实现2.2.2注册功能实现 3.井字棋游戏3.1 导入需要的工具包3.2 窗口显示3.2 按钮标签显示3.3 棋盘设置初始状态3.4 游…

ChatUI:使用Gradio.NET为LLamaWorker快速创建大模型演示界面

Gradio.NET 是 Gradio 的.NET 移植版本。它是一个能够助力迅速搭建机器学习模型演示界面的库,其提供了简洁的 API,仅需寥寥数行代码就能创建出一个具备交互性的界面。在本篇文章中,我们将会阐述如何借助 Gradio.NET 为 LLamaWorker 快捷地创建…

在java中,使用数组如何防止操作对象的引用造成错误

情况一、 List<Grid> grids new ArrayList<>(); // 添加一些元素到 grids List<Grid> newList grids&#xff1b; // 在 grids 中添加新元素 grids.add(new Grid());在这种情况下&#xff0c;newList 和 grids 实际上引用的是同一个对象。也就是说&#x…

新需求:如何实现一个ShardingSphere分库分表平台

大家好&#xff0c;目前我们正面对一个既具挑战又令人兴奋的任务——构建一套高效、稳定的数据处理系统&#xff0c;特别是一个结合了SpringBoot、ShardingSphere、MyBatisPlus和MySQL技术的综合数据分库分表平台。简单来说&#xff0c;我们要做的就是打造一个能轻松应对大数据…

企智汇软件:机电工程项目管理系统智能化管理,洞悉项目全貌!

在机电工程领域&#xff0c;项目管理的复杂性要求系统不仅要能够处理大量的数据和信息&#xff0c;还要能够提供实时的洞察和分析&#xff0c;以支持快速而明智的决策。企智汇机电工程项目管理系统正是为了满足这些需求而设计的&#xff0c;它通过一系列先进的功能&#xff0c;…

计算机专业课面试常见问题-计算机网络篇

目录 1. 计算机网络分为哪 5 层&#xff1f; 2. TCP 协议简述&#xff1f; 3. TCP 和 UDP 的区别&#xff1f;->不同的应用场景&#xff1f; 4. 从浏览器输入网址到显示页…

ES6深潜指南:解锁JavaScript类与继承的高级技巧,让您的代码更加优雅

前言 随着前端技术的迅猛发展&#xff0c;JavaScript已经成为构建现代Web应用不可或缺的编程语言。ES6&#xff08;ECMAScript 2015&#xff09;引入了许多期待已久的特性&#xff0c;其中类&#xff08;Classes&#xff09;和继承机制的引入&#xff0c;极大地增强了JavaScrip…

如何在 qmake(QtCreator)中指定 Mac 平台

在 Qt 项目文件(.pro 文件)中设置针对 Mac OS 的配置项。通常情况下,我们可以使用如下方式为 Windows 和 Unix 系统分别添加源文件: win32 {SOURCES += hellowin.cpp } unix {SOURCES += hellounix.cpp }虽然 Mac OS 是类 Unix 系统,但有时我们仍然需要区分它和 Linux 系…

基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)

一、效果图 二、方法 改变elementUI 的主要色 --el-color-primary 为自己选择的颜色&#xff0c;核心代码如下&#xff1a; // 处理主题样式 export function handleThemeStyle(theme) {document.documentElement.style.setProperty(--el-color-primary, theme) } 三、全部代…