Egg框架搭建后台服务【2】

前言

接上文 Egg框架搭建后台服务【1】,继续优化后台服务,之前直接用 SQL 语句调用的数据库数据,既不安全,也比较麻烦,当然最重要的是“显着不专业”。

所以本文仍然是增删改查,重点是将原本 SQL 语句操作改为 ORM 框架 sequelize 操作。

开发

初始化

安装

安装 sequelize 框架及 mysql2 库(我这里用的是MySQL,所以安装 mysql2库,如果使用的是其他数据库参考 官方文档 安装相应连接器库。)

npm install --save egg-sequelize mysql2

配置

在 config/plugin.js 中引入egg-sequelize 插件。

module.exports = {sequelize: {enable: true,package: 'egg-sequelize'},
};

在 config/config.default.js 中编写配置

/* eslint valid-jsdoc: "off" *//*** @param {Egg.EggAppInfo} appInfo app info*/
module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '123';// add your middleware config hereconfig.middleware = [];// 关闭安全配置config.security = {csrf: {enable: false,}};// 添加sequelize配置config.sequelize = {dialect: 'mysql',host: '127.0.0.1',port: 3306,database: 'egg-blogs',username: 'root',password: '12345678'}// add your user config hereconst userConfig = {// myAppName: 'egg',};return {...config,...userConfig,};
};

开发逻辑

Model

创建 app/model/Tag.js

module.exports = (app) => {const {STRING} = app.Sequelize;const Tag = app.model.define('tag', {id: {type: STRING, primaryKey: true, autoIncrement: true},tag_name: STRING,tag_color: STRING,remark: STRING,}, {timestamps: true,createdAt: 'create_time',updatedAt: 'update_time',tableName: 'tag'});return Tag;
}

注意:这里一定要指定主键,配置部分如果数据库中表明为 tags,可以不指定 tableName, sequelize 会自动推定表名。表字段如果不具备 createAt、updateAt,可以设置为 false 去除,也可以映射为其他字段。

Service

修改原本的 app/service/tag.js

const {Service} = require('egg');class TagsService extends Service {async getTagList(params) {const {ctx, app} = this;const {Op} = app.Sequelize;const query = {where: {tag_name: {[Op.like]: `%${params.tagName || ''}%`}}}const tagList = await ctx.model.Tag.findAll(query);ctx.status = 200;ctx.body = {code: 200,success: true,data: tagList,msg: '获取标签列表成功',show: false}}async createTag(params) {const {ctx, app} = this;const tagInfo = {id: ctx.helper.snowflakeId(),tagName: params.tagName,tagColor: params.tagColor,remark: params.remark}const result = await app.model.Tag.create(tagInfo)ctx.status = 200;ctx.body = {code: 200,success: true,data: result,msg: '创建标签成功',show: true}}async updateTag(params) {const {ctx, app} = this;const tagInfo = {tagName: params.tagName,tagColor: params.tagColor,remark: params.remark}const result = await ctx.model.Tag.update(tagInfo, {where: {id: params.id}});ctx.status = 200;ctx.body = {code: 200,success: true,data: result,msg: '更新标签成功',show: true}}async deleteTag(params) {const {ctx, app} = this;const ids = params.ids.split(',');await ctx.model.Tag.destroy({where: {id: ids}});ctx.status = 200;ctx.body = {code: 200,success: true,msg: '删除标签成功',show: true}}
}module.exports = TagsService;

注意:这里因为是初学,仅实现就收手了,还有可优化的地方。

总结

相较于 MySQL 直连操作数据库的方案,ORM 的方案无疑更加安全,也更加专业。后端在实现数据库操作的时候基本上都使用的 ORM 框架,这种实现方式在多人开发的时候不至于 SQL 语句写的满天飞。

问题:

  1. sequelize 框架具体逻辑并不太清楚,很多地方仍存在优化空间,尤其是错误处理。
  2. 数据库字段和前后端数据对接方面问题仍然不清楚,有些字段使用 tagName 的小驼峰方式仍可以走通,但是有些地方必须和数据库一致,写 tag_name。
  3. 数据库配置项数据应该是动态的,独立于项目外的,实现配置化,此处仍不太清楚。

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

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

相关文章

【QT】QMessageBox 弹出消息框,对话确认框(确定/取消)

1.无互动 QMessageBox::information(nullptr,"信息","登陆成功");2.互动:确定、取消 QMessageBox::StandardButton box; box QMessageBox::question(this, "提示", "确定要添加吗?", QMessageBox::Yes|QMessageBox::…

8个Linux软件包管理命令

软件包管理器允许在 Linux 发行版上轻松安装、更新和删除软件。常用的软件包管理器包括 APT、YUM、DNF、Pacman 和 Zypper。 1. apt – Debian/Ubuntu 软件包管理器 apt 命令使用 APT 软件库管理 Debian/Ubuntu 系统上的软件包。它允许安装、更新和删除软件包。 例子&#x…

Linux 使用小记

安装IDEA mkdir -p /home/app/idea tar -zxvf ideaIU-2022.3.3.tar.gz -C /home/app/idea cd /usr/local/IDEA/idea-IU-223.8836.41/bin sh ./idea.sh 配置 IDEA 快捷方式 sudo gedit /usr/share/applications/idea.desktop 写入下面的内容 [Desktop Entry] NameIntelliJ …

大模型学习读书笔记01——大模型基础

大模型学习读书笔记01——大模型基础 1、什么是语言模型 语言模型 评判由一些单词排列组合而成的句子是否更像真正的、自然的句子。(通俗的说是否像人话) 语言模型的经典定义是一种对词符(token)序列的概率分布。每个token在真…

Docker 镜像的详解及创建(Dockerfile详解)

目录 镜像加载的原理 联合文件系统(UnionFS) 镜像结构的分层 Dockerfile Dockerfile结构 dockerfile常用命令 Dockerfile 编写规范 docker创建镜像的方法 基于现有镜像创建 示例: 基于本地模版创建 示例 基于Dockerfile 创建 示…

关于基于STM32使用外部中断控制按键

关于基于STM32使用外部中断控制按键的相关论文,虽然我不能直接提供具体的论文全文,但可以为您描述一下这类论文可能涉及的内容和框架: 标题:《基于STM32微控制器的外部中断系统在按键控制应用中的设计与实现》 摘要:…

AcWing 846. 树的重心(dfs)

这是一道我一开始没怎么看懂的题目,然后后面看了y神的讲解就豁然开朗了 不过我们首先要有先置知识来理解这道题目 先置知识 邻接表:是一种表示图的数据结构,它通过链表的方式记录每个顶点及其相邻的顶点。在这个具体的问题中,使…

RAG代码实操之斗气强者萧炎

📑前言 本文主要是【RAG】——RAG代码实操的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#x…

Netty 介绍、使用场景及案例

Netty 介绍、使用场景及案例 1、Netty 介绍 https://github.com/netty/netty Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可扩展的网络服务器和客户端。它是一个开源项目,最初由JBoss公司开发,现在由社区维护。Netty的…

企业网络出口部署案例

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

行分类问题

行分类问题可以应用于多个领域和问题,其中一些示例包括: 文本分类: 在自然语言处理中,可以将文本分为不同的类别,例如情感分析、主题分类等。每个文本可以被视为一个“行”,而分类任务就是对每个行进行分类…

myql进阶-一条查询sql在mysql的执行过程

目录 1. 流程图 2. 各个过程 2.1 连接器 2.2 分析器 2.3 优化器 2.4 执行器 2.5 注意点 1. 流程图 2. 各个过程 假设我们执行一条sql语句如下: select * from t_good where good_id 1 2.1 连接器 首先我们会和mysql建立连接,此时就会执行到连接…

C++20结构化绑定应用实例(二百五十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Neonode触摸传感器模块之I2C鼠标和键盘

引言 触摸传感器模块可用于通过I2C向计算机发送键盘或鼠标输入。Arduino Library示例zForceKeyboardMouse中包含了如何实现这一点的示例。该示例使用官方的Arduino库<Mouse.h>和<Keyboard.h>与主机系统通信。 zForceKeyboardMous…

VR转接器:打破界限,畅享虚拟现实

你是否曾梦想过踏入另一个世界,体验那种仿佛置身其中的感觉?随着科技的飞速发展,虚拟现实(VR)已经成为了现实。而VR转接器,正是让你畅享虚拟现实的关键所在。 添加图片注释,不超过 140 字&…

猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

Web前端 ---- 【Vue3】vue3中的组件传值(props、自定义事件、全局事件总线)

目录 前言 props 自定义事件 全局事件总线 安装第三方库mitt 封装event-bus.js文件 使用全局事件总线 清除全局事件绑定 前言 本文介绍在vue3中的组件传值,props、自定义事件以及全局事件总线。相较于vue2中,略有变化。关于vue2中的组件传值看这篇…

vscode运行Python的两种方法,及无法运行的原因

vscode运行Python代码 下面介绍的vscode运行Python代码的方法基于的一个前提条件是:当前的计算机已经安装好了Python,且已经配置好了相关的环境变量。如果要查看是否已经都安装好了,可以打开Windows系统的命令行工具Windows PowerShell&…

鸿蒙(HarmonyOS)应用开发指南

1. 概述 1.1 简介 鸿蒙(即 HarmonyOS ,开发代号 Ark,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…

vue、element-ui使用el-tooltip判断文本是否溢出

1.需求:需要实现文本单行显示,超出时,使用省略号,划过该文本时使用tooltip显示全部文本。需要考虑数据是由接口动态获取,只有溢出文本鼠标滑过时显示全部文本,没有溢出的则不需要。 2.实现: 第…