You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
10 KiB
10 KiB
✨ API 集成完成!完整总结
🎉 已为你完成的工作
1. ✅ Axios 配置文件 (src/api/index.ts)
完整的 HTTP 客户端配置,包括:
✓ axios 实例创建
✓ 请求拦截器 - 自动添加 Authorization header
✓ 响应拦截器 - 自动解析响应、处理错误
✓ Token 过期处理 - 自动清除并跳转登录
✓ 环境变量支持 - 开发/生产不同 API 地址
2. ✅ API 服务层 (src/api/auth.ts)
完整的登录 API 接口定义,包括:
✓ 类型定义 (TypeScript)
✓ loginApi() - 登录接口
✓ logoutApi() - 登出接口
✓ getUserInfoApi() - 获取用户信息
✓ refreshTokenApi() - 刷新 token
✓ 详细的 JSDoc 注释
3. ✅ 认证 Store 更新 (src/stores/auth.ts)
集成后端 API 的状态管理:
✓ async login() - 调用真实 API
✓ async logout() - 调用登出 API
✓ setUser() - 更新用户信息
✓ localStorage 持久化
✓ 错误处理
4. ✅ 登录页面更新 (src/views/LoginView.vue)
支持异步 API 调用的登录页面:
✓ async handleLogin()
✓ 加载状态管理
✓ 错误处理和提示
✓ 回车键提交
✓ 完整的错误消息
5. ✅ 环境配置文件
✓ .env.development - 开发环境 API 地址
✓ .env.production - 生产环境 API 地址
✓ .env.local - 本地覆盖配置
6. ✅ 完整的文档
✓ API_INTEGRATION_GUIDE.md - 详细集成指南
✓ BACKEND_API_EXAMPLE.md - 后端实现参考 (Node.js/Python)
✓ API_INTEGRATION_COMPLETE.md - 完整工作流程说明
✓ API_QUICK_REFERENCE.md - 快速参考卡片
📂 项目结构
src/
├── api/
│ ├── index.ts ← axios 实例 + 拦截器
│ └── auth.ts ← 登录 API 接口定义 ← 可在这里添加更多 API
├── stores/
│ ├── auth.ts ← 认证状态管理(已与 API 集成)
│ └── counter.ts
├── views/
│ ├── LoginView.vue ← 登录页面(已支持异步 API)
│ ├── AdminLayout.vue
│ └── admin/
│ ├── DashboardView.vue
│ ├── UsersView.vue
│ ├── ProductsView.vue
│ ├── OrdersView.vue
│ └── SettingsView.vue
├── components/
│ ├── Header.vue
│ ├── Sidebar.vue
│ └── ...
├── router/
│ └── index.ts
├── main.ts
└── App.vue
root/
├── .env.development ← 开发环境配置
├── .env.production ← 生产环境配置
├── .env.local ← 本地覆盖
├── API_INTEGRATION_GUIDE.md ← 详细教程
├── BACKEND_API_EXAMPLE.md ← 后端代码示例
├── API_INTEGRATION_COMPLETE.md ← 完整说明
└── API_QUICK_REFERENCE.md ← 快速参考
🔄 完整工作流
前端流程
1️⃣ 用户在登录页输入用户名和密码
└─> username.value = 'admin'
└─> password.value = '123456'
2️⃣ 点击"登录"按钮
└─> handleLogin() 被调用
3️⃣ 登录方法开始
└─> loading.value = true
└─> authStore.login(username, password) 被调用
4️⃣ Store 中的登录方法
└─> loginApi({ username, password }) 被调用
└─> 返回 Promise
5️⃣ API 函数
└─> http.post('/auth/login', { username, password })
└─> 返回 Promise
6️⃣ Axios 请求拦截器
└─> 检查 localStorage 中是否有 auth_token
└─> 如果有,添加 Authorization: Bearer <token>
└─> 发送 HTTP 请求
7️⃣ HTTP 请求发送到后端
└─> POST http://localhost:3000/api/auth/login
└─> Content-Type: application/json
└─> Body: { "username": "admin", "password": "123456" }
8️⃣ 后端处理请求
└─> 验证用户名和密码
└─> 生成 JWT token
└─> 返回 JSON 响应
9️⃣ Axios 响应拦截器
└─> 检查响应状态码
└─> 如果 401,清除 token 并跳转登录
└─> 提取 response.data 并返回
🔟 Store 接收响应
└─> 检查 response.code === 200
└─> 保存 token 和 user 到 localStorage
└─> 返回 true
1️⃣1️⃣ 组件接收结果
└─> 显示"登录成功"提示
└─> 路由跳转到 /admin/dashboard
✨ 完成!用户已登录
💻 后端需要做什么
最小实现示例 (Node.js Express)
app.post('/api/auth/login', (req, res) => {
const { username, password } = req.body
// 验证用户
if (username === 'admin' && password === '123456') {
// 生成 token (使用 JWT)
const token = jwt.sign({ id: 1, username }, 'secret')
// 返回正确格式的响应
res.json({
code: 200,
message: '登录成功',
data: {
token,
user: {
id: '1',
username: 'admin',
email: 'admin@example.com',
role: 'admin'
}
}
})
} else {
res.status(401).json({
code: 401,
message: '用户名或密码错误'
})
}
})
响应格式必须严格遵守
✅ 必须返回
{
"code": 200,
"message": "登录成功",
"data": {
"token": "jwt_token_here",
"user": {
"id": "1",
"username": "admin",
"email": "admin@example.com",
"role": "admin"
}
}
}
❌ 不要这样返回
{
"token": "...", // ❌ 缺少 code 和 message
"user": {...}
}
🚀 立即开始
第 1 步:准备后端服务
# 方案 A: 使用提供的 Node.js 示例
# 参考 BACKEND_API_EXAMPLE.md 创建 server.js
node server.js
# 方案 B: 使用你自己的后端
# 确保实现了 POST /api/auth/login 接口
# 返回上述格式的 JSON
第 2 步:配置前端 API 地址
编辑 .env.development(可选,因为已配置默认值):
VITE_API_URL=http://localhost:3000/api
第 3 步:启动前端开发服务器
npm run dev
第 4 步:测试登录
- 访问 http://localhost:5173
- 输入用户名和密码
- 点击登录
- 应该看到"登录成功"提示并跳转到仪表板
第 5 步:验证请求
- 打开浏览器开发者工具 (F12)
- 点击 Network 标签
- 再次登录
- 看到 POST /api/auth/login 请求
- 点击查看请求和响应的详细信息
📝 代码使用示例
在登录页使用
// LoginView.vue
import { useAuthStore } from '@/stores/auth'
const authStore = useAuthStore()
const success = await authStore.login('admin', '123456')
在其他组件中获取用户信息
import { useAuthStore } from '@/stores/auth'
const authStore = useAuthStore()
console.log(authStore.user) // 用户信息
console.log(authStore.token) // JWT token
console.log(authStore.isAuthenticated) // 是否已登录
创建新的 API 接口
// src/api/users.ts
import http from './index'
export const getUsersApi = () => http.get('/users')
export const createUserApi = (data) => http.post('/users', data)
export const updateUserApi = (id, data) => http.put(`/users/${id}`, data)
export const deleteUserApi = (id) => http.delete(`/users/${id}`)
// 在组件中使用
import { getUsersApi } from '@/api/users'
const response = await getUsersApi()
✅ 完成清单
前端完成
- Axios 配置
- 请求/响应拦截器
- API 服务层
- 认证 Store
- 登录页面
- 类型定义
- 环境配置
- 完整文档
等待后端完成
- 实现 POST /api/auth/login 接口
- 返回正确的 JSON 格式
- 配置 CORS 允许前端请求
- 其他业务接口 (可选)
🎓 后续学习
添加其他 API
参考登录 API,在 src/api/ 中创建新文件:
src/api/
├── index.ts # axios 实例
├── auth.ts # ✓ 已完成
├── users.ts # 待添加
├── products.ts # 待添加
├── orders.ts # 待添加
└── ...
完整的 CRUD 示例 (用户管理)
// src/api/users.ts
import http from './index'
export interface User {
id: number
username: string
email: string
}
// 查 - Read
export const getUsersApi = (page = 1, limit = 10) =>
http.get('/users', { params: { page, limit } })
// 增 - Create
export const createUserApi = (data: User) =>
http.post('/users', data)
// 改 - Update
export const updateUserApi = (id: number, data: Partial<User>) =>
http.put(`/users/${id}`, data)
// 删 - Delete
export const deleteUserApi = (id: number) =>
http.delete(`/users/${id}`)
🔍 调试技巧
查看请求和响应
// 在 api/index.ts 中添加日志
instance.interceptors.request.use((config) => {
console.log('📤 发送请求:', config.method?.toUpperCase(), config.url)
console.log('数据:', config.data)
return config
})
instance.interceptors.response.use((response) => {
console.log('📥 收到响应:', response)
return response
})
检查 localStorage
// 在浏览器控制台执行
localStorage.getItem('auth_token') // 查看 token
localStorage.getItem('user') // 查看用户信息
测试 API 接口
# 使用 curl
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
# 或使用 Postman/Insomnia GUI 工具
🎉 总结
你现在拥有:
✅ 完整的前端 API 架构 - 随时可以调用后端接口 ✅ 登录示例 - 展示了完整的请求/响应流程 ✅ 可扩展的 API 服务层 - 轻松添加更多接口 ✅ 完整的文档 - 学习和参考资料 ✅ 后端代码示例 - Node.js 和 Python 实现
现在你需要做的只是:
- 实现后端登录接口
- 启动后端和前端
- 测试登录功能
其他所有的 CRUD 操作都可以按照登录示例的方式进行!
祝你开发愉快!🚀
📚 相关文档