Vue CLI全栈开发实战:从零构建用户管理系统
创作时间:
作者:
@小白创作中心
Vue CLI全栈开发实战:从零构建用户管理系统
在当今的Web开发领域,Vue.js以其简洁的API和强大的功能赢得了广大开发者的青睐。然而,一个完整的Web应用不仅仅需要前端界面,还需要后端服务、数据库支持以及用户认证等全栈功能。本文将介绍如何使用Vue CLI快速搭建一个包含前端路由、状态管理、后端API、数据库操作和权限控制的全栈应用。
项目概述
本项目将实现一个简单的用户管理系统,包含以下功能:
- 用户注册和登录
- 管理员和普通用户的权限区分
- 后台管理页面,允许管理员查看和管理用户列表
技术栈
- 前端:Vue CLI + Vue Router + Pinia
- 后端:Node.js + Express
- 数据库:MySQL
- ORM:Sequelize
- 认证:JWT
- 密码加密:bcrypt
前端开发
项目初始化
使用Vue CLI创建项目:
npm create vue@latest
选择Vue 3版本,并安装Vue Router和Pinia:
npm install vue-router pinia axios
路由配置
在router/index.js中配置路由:
import { createRouter, createWebHistory } from 'vue-router'
import Login from '../views/Login.vue'
import Admin from '../views/Admin.vue'
const routes = [
{ path: '/', redirect: '/login' },
{ path: '/login', component: Login },
{ path: '/admin', component: Admin, meta: { requiresAuth: true, requiresAdmin: true } }
]
const router = createRouter({
history: createWebHistory(),
routes
})
router.beforeEach((to, from) => {
const isAuthenticated = localStorage.getItem('token')
const isAdmin = localStorage.getItem('role') === 'admin'
if (to.meta.requiresAuth && !isAuthenticated) return '/login'
if (to.meta.requiresAdmin && !isAdmin) return '/login'
})
export default router
状态管理
使用Pinia进行状态管理:
// store/index.js
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => ({
token: localStorage.getItem('token') || '',
role: localStorage.getItem('role') || ''
}),
actions: {
setToken(token) {
this.token = token
localStorage.setItem('token', token)
},
setRole(role) {
this.role = role
localStorage.setItem('role', role)
}
}
})
后端开发
环境搭建
安装必要的依赖:
npm install express sequelize mysql2 bcryptjs jsonwebtoken
数据库连接
在server.js中配置数据库连接:
const express = require('express')
const { Sequelize } = require('sequelize')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const app = express()
app.use(express.json())
const sequelize = new Sequelize('your_db', 'user', 'password', {
host: 'localhost',
dialect: 'mysql'
})
用户模型
定义用户模型:
const User = sequelize.define('User', {
username: { type: Sequelize.STRING, unique: true },
password: Sequelize.STRING,
role: { type: Sequelize.ENUM('admin', 'user'), defaultValue: 'user' }
})
初始化管理员
确保数据库中存在管理员账户:
async function initializeAdmin() {
const admin = await User.findOne({ where: { username: 'admin' } })
if (!admin) {
const hashedPassword = await bcrypt.hash('admin123', 10)
await User.create({ username: 'admin', password: hashedPassword, role: 'admin' })
}
}
API路由
实现注册和登录接口:
app.post('/api/register', async (req, res) => {
try {
const hashedPassword = await bcrypt.hash(req.body.password, 10)
const user = await User.create({
username: req.body.username,
password: hashedPassword
})
res.status(201).json(user)
} catch (error) {
res.status(400).json({ error: 'Registration failed' })
}
})
app.post('/api/login', async (req, res) => {
const user = await User.findOne({ where: { username: req.body.username } })
if (user && await bcrypt.compare(req.body.password, user.password)) {
const token = jwt.sign(
{ id: user.id, role: user.role },
'your_secret_key',
{ expiresIn: '1h' }
)
res.json({ token, role: user.role })
} else {
res.status(401).json({ error: 'Invalid credentials' })
}
})
权限控制
JWT认证
在前端,使用JWT进行身份验证:
// api.js
import axios from 'axios'
import { useUserStore } from '@/store'
const api = axios.create({
baseURL: 'http://localhost:3000/api'
})
api.interceptors.request.use(config => {
const store = useUserStore()
if (store.token) {
config.headers.Authorization = `Bearer ${store.token}`
}
return config
})
export default api
路由守卫
在前端路由中添加权限验证:
router.beforeEach((to, from) => {
const store = useUserStore()
const isAuthenticated = store.token
const isAdmin = store.role === 'admin'
if (to.meta.requiresAuth && !isAuthenticated) return '/login'
if (to.meta.requiresAdmin && !isAdmin) return '/login'
})
部署和测试
测试步骤
- 注册普通用户
- 使用admin/admin123登录管理员账户
- 验证不同角色的页面访问权限
- 测试用户管理功能(编辑/删除)
部署注意事项
- 配置环境变量(数据库密码、JWT密钥等)
- 添加错误处理机制
- 配置HTTPS(生产环境必备)
- 优化数据库连接池配置
通过以上步骤,我们完成了一个基于Vue CLI的全栈应用开发。这个项目不仅展示了前端路由和状态管理的实现,还深入介绍了后端API开发、数据库设计和权限控制等关键环节。希望这个实践案例能为你的Vue全栈开发提供有价值的参考。
热门推荐
长城国家文化公园里的齐长城故事
济南市长清区齐长城考古发掘取得重大突破
揭秘齐长城建造技艺:古代军事防御奇迹
中国银行再获董事会最佳实践奖,公司治理成企业价值新引擎
85%内地投资者关注可持续发展,公司治理成赢得信任关键
提升财务透明度,企业如何赢得投资者信任
香肠的存放方法及注意事项
新安江山水画廊:黄山自驾游的必打卡景点
为何多地房贷利率出现回升?
急性喉炎来袭,如何打好“咽喉保卫战”?护理攻略来了!
瘦身达人必备:清蒸鸡胸肉、烤三文鱼、番茄牛肉炖
瘦身必备:鸡蛋燕麦鸡胸肉三文鱼
告别emo,用心理辅导点亮你的瘦身之路
健身搭子:让运动效果提升200%的秘密武器
吃这些食物,轻松降LDL护心脏
中国心脏健康饮食:显著降低LDL-C水平
职场前三年:用三大思维模式破解职场困境
破解股权分散困局:从股东沟通到一致行动协议
优化股权结构提升绩效,五大方案助力中小企业发展
股权结构调整如何影响投资收益?四大维度全面解析
股权变更法律指南:关键环节与风险防范要点
乌镇冬日游:暖锅夜酒与文艺诗会,感受水乡古镇的冬日魅力
茅盾与木心:乌镇的文化双璧
乌镇旅游打卡攻略:六大景点不容错过!
冬游乌镇:东栅西栅美食美景全攻略
跟着段元诚拍乌镇:捕捉水乡古镇的最美瞬间
没演技就别硬演!看《清明上河图密码》张颂文,这才是底层老百姓
AI黑科技颠覆电影制作,你知道多少?
《致命AI Afraid》:2024年度最炸科幻大片来袭!
2024年AI电影制作的五大趋势