通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计
项目背景
本文基于 TypeScript + Express + Vue3 ,从零构建一个用户认证与授权管理系统。这个系统的核心部分包括前端、后端和数据库。我们需要确保各部分合理分层、易于维护和扩展,让我们一步步去实现我们的系统。
一、项目结构设计
1. 前端 (Vue 3 + Element Plus/Naive UI)
- 使用 Vue 3 的单页面应用架构,配合 Vue Router 和 Vuex/Pinia 进行路由和状态管理。
- UI 组件库选用 Element Plus/Naive UI来快速构建表单、表格、对话框等常用后台管理功能。
前端目录结构:
/frontend
├── public/ # 静态资源
├── src/
│ ├── assets/ # 静态资源(图片、样式等)
│ ├── components/ # 公共组件
│ ├── layouts/ # 布局组件
│ ├── views/ # 各页面视图
│ ├── router/ # 路由配置
│ ├── store/ # 状态管理(Vuex/Pinia)
│ ├── services/ # 接口请求服务 (Axios等)
│ ├── utils/ # 工具函数
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── package.json
├── tsconfig.json # TypeScript 配置
└── vite.config.js # Vite 配置
2. 后端 (Node.js + Express + MySQL)
- 使用 Node.js 和 Express 框架来搭建 RESTful API。
- 数据库使用 MySQL,连接采用 Sequelize ORM 来管理模型和数据库交互。
后端目录结构:
/backend
├── src/
│ ├── config/ # 配置文件(数据库、swagger、logger等)
│ ├── controllers/ # 控制器 (处理业务逻辑)
│ ├── models/ # 数据库模型 (Sequelize)
│ ├── routes/ # 路由定义
│ ├── middlewares/ # 中间件(认证、错误处理等)
│ ├── types # 自定义类型
│ ├── services/ # 业务逻辑层
│ ├── utils/ # 工具类
│ ├── app.ts # Express 应用
├── package.json
├── .env # 环境变量
└── nodemon.json # nodemon配置
└── tsconfig.json # ts配置
二、概要设计
1. 前端 (Vue 3 + Element Plus)
- 用户管理页面:查看、添加、编辑和删除用户。
- 权限管理页面:为不同角色设置不同权限。
- 数据统计页面:展示关键业务数据的统计与分析图表。
- 通知/消息中心:查看和管理系统消息通知。
使用 Vue Router 来管理路由,使用 Vuex/Pinia 来管理用户状态、权限和全局数据。采用 Axios 发起 HTTP 请求,和后端进行数据交互。
2. 后端 (Node.js + Express)
- 用户管理 API:增删查改用户信息,支持分页和查询。
- 登录/认证 API:使用 JWT 进行用户认证,支持权限控制。
- 角色/权限管理 API:创建和管理角色,关联权限。
- 数据统计 API:从数据库中获取业务相关数据,生成图表所需的数据。
使用 Sequelize 进行数据库操作,配合 MySQL。通过 Express 中间件实现身份验证、权限控制和错误处理。
三、接口设计
接口将采用 RESTful 风格,以下是一些基本的接口设计:
-
用户管理 API
GET /api/users: 获取用户列表GET /api/users/:id: 获取单个用户信息POST /api/users: 创建新用户PUT /api/users/:id: 更新用户信息DELETE /api/users/:id: 删除用户
-
角色/权限管理 API
GET /api/roles: 获取角色列表POST /api/roles: 创建新角色PUT /api/roles/:id: 更新角色DELETE /api/roles/:id: 删除角色GET /api/roles/:id/permissions: 获取角色的权限列表
-
认证 API
POST /api/auth/login: 用户登录,返回 JWT TokenPOST /api/auth/register: 用户注册GET /api/auth/profile: 获取用户信息(需登录)
-
数据统计 API
GET /api/stats/overview: 获取系统概览数据GET /api/stats/:type: 根据类型获取统计数据
三、数据库设计
为了实现用户认证与授权,我们需要设计几个关键的数据库表:Users(用户表)、Roles(角色表)、Permissions(权限表)以及 RolePermissions(角色权限关联表)。
用户表 (Users)
用于存储用户的基本信息和认证数据。
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| username | STRING | 用户名,唯一 |
| STRING | 电子邮件,唯一 | |
| phone | STRING | 电话号码,唯一 |
| avatar | STRING | 头像 URL,可选 |
| password | STRING | 加密后的密码 |
| role_id | INTEGER | 关联角色表的外键 |
| createdAt | DATE | 创建时间 |
| updatedAt | DATE | 更新时间 |
角色表 (Roles)
用于定义系统中的不同角色。
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| name | STRING | 角色名称,唯一 |
| description | STRING | 角色描述,可选 |
| createdAt | DATE | 创建时间 |
| updatedAt | DATE | 更新时间 |
权限表 (Permissions)
用于定义系统中的不同权限。
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| name | STRING | 权限名称,唯一 |
| description | STRING | 权限描述,可选 |
| createdAt | DATE | 创建时间 |
| updatedAt | DATE | 更新时间 |
角色权限关联表 (RolePermissions)
用于建立角色与权限之间的多对多关系。
| 字段名 | 类型 | 描述 |
|---|---|---|
| roleId | INTEGER | 关联角色表的外键 |
| permissionId | INTEGER | 关联权限表的外键 |
| createdAt | DATE | 创建时间 |
| updatedAt | DATE | 更新时间 |
四、开发框架技术栈
前端
- Vue 3.0: 框架主流版本。
- TypeScript:增强 JavaScript 的类型系统,提升代码的可读性和维护性。
- Element Plus: UI组件库,后台系统常用,简化开发。
- Axios: 异步请求库,方便与后端 API 交互。
后端
- Node.js: 使用 Express 框架来搭建轻量级 API 服务。
- TypeScript:增强 JavaScript 的类型系统,提升代码的可读性和维护性。
- Sequelize: ORM 框架,简化与 MySQL 的数据交互。
- JWT: JSON Web Token,用于实现用户认证和授权。
- bcryptjs:用于密码加密。
- Swagger:用于 API 文档的生成和展示。
- dotenv:用于环境变量管理。
- nodemon: 用于开发时自动重启服务器。
数据库
- mysql: 用于与 MySQL 数据库通信。
总结
以上是用户权限管理系统的相关设计文档。下一篇开始搭建后端服务。
相关文章:
通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计
项目背景 本文基于 TypeScript Express Vue3 ,从零构建一个用户认证与授权管理系统。这个系统的核心部分包括前端、后端和数据库。我们需要确保各部分合理分层、易于维护和扩展,让我们一步步去实现我们的系统。 一、项目结构设计 1. 前端 (Vue 3 E…...
JavaScript 第13章:Ajax 与异步请求
在Web开发中,异步请求是一种非常重要的技术,它可以让网页在不重新加载的情况下与服务器交互。本章将介绍两种常用的异步请求技术:XMLHttpRequest 和 Fetch API,以及它们如何用于处理JSON数据交换,并通过一个实战案例—…...
速卖通商品详情接口技术解析及Python代码示例
速卖通商品详情接口技术解析及Python代码示例 速卖通(AliExpress)作为全球知名的跨境电商平台,其开放平台提供了丰富的API接口,允许开发者集成速卖通的各项功能,实现商品搜索、详情查询、订单管理等一系列操作。本文将…...
邻接表的有向网(C语言代码)
#include <stdio.h> #include <stdlib.h> #define MVNum 100 //最大顶点数 //边表结构体 typedef struct ArcNode { //表结点 int adjvex; //邻接点的位置 struct ArcNode* nextarc; //指向下一个…...
大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成
大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而: 目前直接让大模型生成大纲往往是非结构化的,输出格式多样,难以统一和规范&#…...
MRSO算法(JCR2区)
原论文摘要:智能技术的快速发展促使利用自然行为来解决复杂问题的优化算法得以发展。其中,鼠群优化算法(Rat Swarm Optimizer,RSO)受老鼠的社会和行为特征启发,在各个领域已展现出潜力,但其收敛…...
最新Spring Boot3框架入门教程,基础知识讲解(参考官方文档),同时基于MybatisPlus+MYSQL搭建后台管理系统基础流程(附源码)
本文所涉及的代码以及相关文件均上传至仓库:GitHub - yang66-hash/XDPropertyManagementSystemDemo: This is a demo template based on SpringBoot3 in the background of property management system. Spring Boot 是由 Pivotal 团队开发的一款开源框架,它可以帮助…...
导数的概念及在模型算法中的应用
一. 导数概念与计算 1. 导数的物理意义: 瞬时速率。一般的,函数yf(x)在x处的瞬时变化率是 2. 导数的几何意义: 曲线的切线,当点趋近于P时,直线 PT 与曲线相切。容易知道,割线的斜率是当点趋近于 P 时&…...
获取首日涨停封盘后第二次交易日上涨/下跌的概率
有许多投资者喜欢在股票涨停封盘后,跟进买入。普通股民会认为一个能在今日涨停封盘的股票,证明其上市公司正有十分重大的利好信息,只需要跟进购买便可以获取短期利益。 我们用数据来看一下在当日涨停封盘后,第二次交易日是上涨还…...
shell $ 用法
Shell脚本中$符号的几种用法小结_linux shell_脚本之家 Shell 传递参数 | 菜鸟教程 $ 符号说明$0Shell 的命令本身1到9表示 Shell 的第几个参数$?显示最后命令的执行情况$#传递到脚本的参数个数$$脚本运行的当前进程 ID 号$*以一个单字符串显示所有向脚本传递的参数$!后台运行…...
如何用支付宝实现靠脸吃饭
还记得上学时,每当下课铃声响起,我们就会像一群脱缰的野马一样,浩浩荡荡地冲向食堂。最令人崩溃的时刻莫过于终于到达打饭窗口前排时,却发现饭卡忘带了!但现在,这种情况将不再发生。许多学校食堂已经配备了…...
Visual Studio的实用调试技巧总结
对于很多学习编程的老铁们来说,是不是也像下面这张图一样写代码呢? 那当我们这样编写代码的时候遇到了问题?大家又是怎么排查问题的呢?是不是也像下面这张图一样,毫无目的的一遍遍尝试呢? 这篇文章我就以 V…...
graphrag学习总结
学习视频:b站链接 项目链接 GraphRAG 的基本概念 Document(文档):系统中的输入文档。这些文档要么代表CSV中的单独行,要么代表单独的txt文件。 TextUnit(文本块):要分析的文本块。…...
专题:贪心算法(已完结)
1.分发饼干 方法一:用最大的胃口 找到最大的饼干(先遍历胃口) class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 主要思路 用最大的饼干找最大的胃口sort(g.begin(),g.end());so…...
Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
单机模式 单机模式是Hadoop最简单的运行模式。在单机模式下,所有Hadoop组件都运行在单个机器上,包括HDFS、MapReduce等。由于只有一个节点参与计算,单机模式适用于开发和测试阶段,不适合用于处理大规模数据。在单机模式下…...
JavaScript将array数据下载到Excel中
具体代码如下: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…...
【前端】Bootstrap:快速开始
Bootstrap 是一个功能强大且易于使用的前端框架,专门用于创建响应式和移动优先的网页。学习Bootstrap不仅可以帮助你快速构建现代网页,还可以提升你对前端开发流程的理解。本教程将从基础概念开始,逐步引导你掌握Bootstrap,并通过…...
文献阅读(222) VVQ协议死锁
题目:VVQ: Virtualizing Virtual Channel for Cost-Efficient Protocol Deadlock Avoidance时间:2023会议:HPCA研究机构:KAIST request-reply协议死锁如下图所示,每个node收到request之后发送reply,但是想…...
Node.js管理工具NVM
nvm(Node Version Manager)是一个用于管理多个 Node.js 版本的工具。以下是 nvm 的使用方法和一些常见命令: 一、安装 nvm 下载 nvm: 地址:https://github.com/coreybutler/nvm-windows/releases访问 nvm 的 GitHub 仓…...
云原生后端
云原生后端(Cloud-Native Backend)是指在云计算环境中,利用云原生技术(如容器、微服务、服务网格等)构建和部署后端应用程序的一种方法。以下是对云原生后端的详细讲解: 1. 定义 云原生是一种设计和构建应…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
