【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口

news2024/11/20 3:28:09

🍳作者: 贤蛋大眼萌,一名很普通但不想普通的程序媛 \color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛} 贤蛋大眼萌,一名很普通但不想普通的程序媛🤳

🙊语录: 多一些不为什么的坚持 \color{#0000FF}{多一些不为什么的坚持} 多一些不为什么的坚持

📝本文章收录于专栏:Node.js+koa–后端管理系统

💭 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网 \color{#ff7f50}{眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台--牛客网} 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台牛客网

👉🏻点击跳转刷题网免费注册学习

设计动态发布、修改、查询、删除接口

    • ⚙️ 动态内容接口设计思路
    • 🍬 发布动态内容接口
      • ① 创建新的动态内容表
      • ② 定义发布动态内容的接口
      • ③ controller层的函数处理
      • ④ service 层数据库处理
    • 🍿 修改动态内容接口
      • ① 定义路由接口
      • ② 验证用户是否授权和用户权限
      • ③ controller层的函数处理
      • ④ service 层数据库处理
    • 🍫 查询动态内容接口
      • ① 定义路由接口
      • ② 定义查询内容的接口(单个)
      • ③ 定义查询内容的接口(列表)
    • 🧂 删除动态内容接口
      • ① 定义路由接口
      • ② 验证用户登录和验证用户权限
      • ③ Controller和Service中的处理

⚙️ 动态内容接口设计思路

image-20220918105251233

🍬 发布动态内容接口

① 创建新的动态内容表

建表语句:

CREATE TABLE IF NOT EXISTS `moment`(
	id INT PRIMARY KEY AUTO_INCREMENT,
	content VARCHAR(1000) NOT NULL,
	user_id INT NOT NULL,
	createAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	updateAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	FOREIGN KEY(user_id) REFERENCES user(id)
);

② 定义发布动态内容的接口

验证用户是否具备权限verifyAuth//目录:@/middleware/auth_middleware.js)–> 创建动态

//目录:@/router/moment_router.js
// 创建动态
const Router = require('koa-router')
const {
  create, 
} = require('../controller/moment_controller')
const { 
  verifyAuth,
} =require('../middleware/auth_middleware')

const momentRouter = new Router({prefix: '/moment'})

// 创建动态
momentRouter.post('/',verifyAuth,create)

③ controller层的函数处理

image-20220527185642383

④ service 层数据库处理

image-20220527185748817

🍿 修改动态内容接口

① 定义路由接口

image-20220529103029758

② 验证用户是否授权和用户权限

🎧 PS: 很多的内容都需要验证权限: 修改/删除动态,修改/删除评论

接口:业务接口系统/后端管理系统

  • 一对多:user—>role
  • 多对多:role—>menu(删除动态和修改动态)
//目录:@/middleware/auth_middleware.js
// 验证已登录用户是否具备修改内容权限中间件
const verifyPermission = async(ctx,next)=>{
  console.log("验证已登录用户是否具备修改内容权限middleware");
  // 1.获取用户参数
  const [resourceKey ]= Object.keys(ctx.params) 
  const tableName = resourceKey.replace('Id','')
  const resourceId = ctx.params[resourceKey]
  const { id } = ctx.user
  // console.log(momentId,id);

  // 2.查询是否具备权限
  try{
    const isPermission = await authServiece.checkResource(tableName,resourceId,id)
    if(!isPermission) throw new Error()
  }catch(err){
    const error = new Error(errorTypes.UNPERMISSION)
    return ctx.app.emit('error',error,ctx)
  } 
  await next()
}
//目录:@/service/auth_service.js
// 数据库查询用户是否存在
const connection = require('../app/database')

class AuthService {
  async checkResource (tableName,id,userid){
    const statement  = `SELECT * FROM ${tableName} WHERE id = ? AND user_id = ?;`;
    const [result] = await connection.execute(statement,[id,userid])
    return result.length === 0? false:true;
  }
}

module.exports = new AuthService()

③ controller层的函数处理

image-20220918144707221

④ service 层数据库处理

image-20220918144747449

🍫 查询动态内容接口

① 定义路由接口

//目录:@/router/moment_router.js
// 创建动态
const Router = require('koa-router')
const {
  create, 
} = require('../controller/moment_controller')
const { 
  verifyAuth,
} =require('../middleware/auth_middleware')

const momentRouter = new Router({prefix: '/moment'})

// 创建动态
momentRouter.post('/',verifyAuth,create)
// 获取动态信息
momentRouter.get('/',list) //获取动态列表
momentRouter.get('/:momentId',detail) //获取单个列表

② 定义查询内容的接口(单个)

image-20220528144752568

image-20220528144907243

③ 定义查询内容的接口(列表)

image-20220528145019162

image-20220528145034497

最后更新:

image-20220530105620810

🧂 删除动态内容接口

① 定义路由接口

image-20220529134839962

② 验证用户登录和验证用户权限

见上面(verifyAuth)和(verifyPermission)

③ Controller和Service中的处理

image-20220529110851943

  • 动态接口设计完成

PS:

求知无坦途,学问无捷径。👣 一步一个脚印,你走过的路,每一步都算数。 \color{#ff7f50}{一步一个脚印,你走过的路,每一步都算数。} 一步一个脚印,你走过的路,每一步都算数。 每一次进步都是对自己努力的肯定。如果读了文章有收获,不如一起来学习,一起进步吧。传送门🚪刷题神器

image-20220917104224568


在这里插入图片描述

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

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

相关文章

级联选择器(el-cascader)动态加载(lazyLoad)实现省市区三级选择

开开心心工作,兢兢业业生活 一、实现省市区级联选择(插件) 1. 需求:实现一个省市区的级联选择器,点击一级,动态加载下一级 那好,我们找个轮子 2. 他山之石(找个轮子) E…

Eclipse配置Tomcat详细教程,其中包含如何使用eclipse+tomcat创建并运行web项目

一:Tomcat的下载官网:Apache Tomcat - Welcome!https://tomcat.apache.org/ 进入官网显示如图所示的界面,在下下载的是Tomcat9.0版本,你可以自己选一款。 点击然后进入下面这个界面: 在下电脑是64位,所以 在下下载的6…

【vue】仿PC端微信制作聊天框

前言 采用(vuevue-routervuexes6stylus) 来实现一个仿PC端微信的小demo,可以使用一个智能api,实现智能对话。欢迎大家对鄙人提出宝贵意见,相互学习讨论,一起进步。 demo地址 源码地址 demo做的是PC版,建议使用电脑预…

我的VUE 学习之路(下)

前言: 在经历过前面在HTML下的VUE相关基础的洗礼后,我们可以动手去做一些事了,此时发现直接通过直接VUE组件方式与之前在HTML不同,首先要“静一静”,细看之下只是对之前的很多写法做了封装。 本文旨在直接上手Vue项目下…

FormData详解

FormData 接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去,本接口和此方法都相当简单直接。如果表单 enctype 属性设为 multipart/form-data ,则会使用表单的 submit(…

vue项目控制台报错信息问题记录:Uncaught TypeError: Cannot read properties of null (reading ‘setAttribute‘)

在写vue项目的时候,控制台总是报错如下代码: 1、Uncaught TypeError: Cannot read properties of null (reading ‘setAttribute‘) 主要是因为某些代码书写不规范,导致templete解析不出来,从而报错 解决方案: 检查下…

uniapp 实现生成海报并分享给微信好友和保存到本地相册

记录uniapp 生成二维码海报并保存到本地或者分享给微信好友 – 文章目录记录uniapp 生成二维码海报并保存到本地或者分享给微信好友前言一、引入生成二维码的组件二、点击右侧的分享图标生成海报三:将canvas 图片转化成图片(最关键)四&#…

el-tree设置利用setCheckedNodes/setCheckedKeys默认勾选节点,以及通过setChecked新增勾选指定节点

实现目标:在生成el-tree时,默认勾选其中某几个选项;或在进行某个选项的选中时,同时勾选上另一个选项。 实现效果: 在生成树结构时,默认勾选其中的两个选项。 在勾选其中一个选项时,另一个选项…

微前端之 qiankun 入门、上手、实战(构建大型 web 应用)

目录 前言 正文 一、介绍 微前端 qiankun 二、快速上手 ​☛主应用 ① 安装 qiankun ② 在主应用中注册微应用 ​☛微应用 ① 导出相应的生命周期钩子 ② 配置微应用的打包工具 三、项目实战 ​☛主应用 ① 安装 qiankun ② 注册微应用并启动 ③ 主应用添加…

ES6--》对象扩展方法

目录 对象扩展 name 属性 属性的遍历 super关键字 Object.is() Object.assign() Object.getOwnPropertyDescriptors() Object.setPrototypeOf() Object.getPrototypeOf() Object.keys()、Object.values、Object.entries()、Object.fromEntries() Object.hasOwn() 对…

如何在 2022 年为 Web 应用程序选择技术堆栈

文章目录什么是技术堆栈?为 Web 开发选择技术堆栈时要考虑的事项选择熟悉的技术跟随趋势考虑项目的细节确保高安全级别记住你的最后期限选择前端技术栈框架编程语言选择后端技术栈编程语言数据库技术堆栈是您应用程序的核心选择最佳的 Web 应用程序堆栈并非易事&…

vue3+ts遇到的小问题

插件volar安装了没有提示。 解决:1. 检查是或否是最新的版本,是的话进入拓展设置,所有的选项都勾选 2. 还是不行就要更新vscoe了。一般的话会在力捕抓到一个错误。跟新就好了 TypeScript intellisense is disabled on template. To enab…

【简陋Web应用2】人脸检测——基于Flask和PaddleHub

文章目录🚩 前言🌺 效果演示🥦 分析与设计🍉 实现🍬 1. 部署人脸检测模型🍭 2. 使用Flask构建app2.1 目录结构2.2 forms.py2.3 utils.py2.4 app.py2.5 index.html🥝 Bug(s)🚩 前言 本…

Vue根据网络文件路径下载文件【自定义属性 v-down】

Vue根据网络文件路径下载文件【v-down】标准使用方式企业级Vue开发集成(全局挂载)1.src目录下创建directive文件夹(存在则忽略)2.down.js文件3.directive根目录创建index.js文件4.main.js 注册自定义属性全局挂载提到下载文件大家首先肯定会想到 模拟点击…

vue2 使用 cesium 篇 【第一篇】

vue2 使用 cesium 篇 今天好好写一篇哈,之前写的半死不活的。首先说明:这篇博文是我边做边写的,小白也是,实现效果会同时发布截图,如果没有实现也会说明,仅仅作为技术积累,选择性分享&#xff0…

面试官:“ES6中新增的Set方法去重你会吗?”我:“看文章就知道了”

赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 。 文章目录 Set 的基本使用🍔前言🍏正文1. Set1.1 Set的基本使用1.2 Set 常见的属相和方法1.3 应用场景:使用Set对数…

vue组件通信2 | 父子组件通信v-model

引言:最近项目在vue2 升级vue3 ,在这个过程中发现v-model 的变化最大。同时也发现了对于v-model 的不熟悉。 因此,本文从文档、vue2的使用方法、vue2 tsx 的使用方法、vue3的使用方法、使用场景来试图探究一下v-model。 一、文档及vue2中 v-…

vue页面刷新

vue页面刷新 首先我们都知道vue属于单页面应用,默认境况下是不会触发刷新页面操作的,所以这个时候就需要我们通过事件来触发reload()来达到刷新操作 接下来我就为大家介绍三种刷新页面的方法 1. wiindow.location.reload([bForceGet])该方法强迫浏览…

vue中组件的name属性含义与用法

vue中组件的name属性含义与用法 name属性:只有作为组件选项时起作用,用来注册组件名 1、注册组件名 局部注册组件,语法:export default{ components:{"组件名":组件对象}} 其中,"组件名"注册方…

从0搭建Vue3组件库(五): 如何使用Vite打包组件库

本篇文章将介绍如何使用 vite 打包我们的组件库,同时告诉大家如何使用插件让打包后的文件自动生成声明文件(*.d.ts) 打包配置 vite 专门提供了库模式的打包方式,配置其实非常简单,首先全局安装 vite 以及vitejs/plugin-vue pnpm add vite vitejs/plugin-vue -D -w 在 componen…