# ✨ API 集成完成!完整总结 ## 🎉 已为你完成的工作 ### 1. ✅ Axios 配置文件 (`src/api/index.ts`) 完整的 HTTP 客户端配置,包括: ```typescript ✓ axios 实例创建 ✓ 请求拦截器 - 自动添加 Authorization header ✓ 响应拦截器 - 自动解析响应、处理错误 ✓ Token 过期处理 - 自动清除并跳转登录 ✓ 环境变量支持 - 开发/生产不同 API 地址 ``` ### 2. ✅ API 服务层 (`src/api/auth.ts`) 完整的登录 API 接口定义,包括: ```typescript ✓ 类型定义 (TypeScript) ✓ loginApi() - 登录接口 ✓ logoutApi() - 登出接口 ✓ getUserInfoApi() - 获取用户信息 ✓ refreshTokenApi() - 刷新 token ✓ 详细的 JSDoc 注释 ``` ### 3. ✅ 认证 Store 更新 (`src/stores/auth.ts`) 集成后端 API 的状态管理: ```typescript ✓ async login() - 调用真实 API ✓ async logout() - 调用登出 API ✓ setUser() - 更新用户信息 ✓ localStorage 持久化 ✓ 错误处理 ``` ### 4. ✅ 登录页面更新 (`src/views/LoginView.vue`) 支持异步 API 调用的登录页面: ```typescript ✓ 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 └─> 发送 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) ```javascript 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: '用户名或密码错误' }) } }) ``` ### 响应格式必须严格遵守 ✅ **必须返回** ```json { "code": 200, "message": "登录成功", "data": { "token": "jwt_token_here", "user": { "id": "1", "username": "admin", "email": "admin@example.com", "role": "admin" } } } ``` ❌ **不要这样返回** ```json { "token": "...", // ❌ 缺少 code 和 message "user": {...} } ``` ## 🚀 立即开始 ### 第 1 步:准备后端服务 ```bash # 方案 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 步:启动前端开发服务器 ```bash npm run dev ``` ### 第 4 步:测试登录 1. 访问 http://localhost:5173 2. 输入用户名和密码 3. 点击登录 4. 应该看到"登录成功"提示并跳转到仪表板 ### 第 5 步:验证请求 1. 打开浏览器开发者工具 (F12) 2. 点击 Network 标签 3. 再次登录 4. 看到 POST /api/auth/login 请求 5. 点击查看请求和响应的详细信息 ## 📝 代码使用示例 ### 在登录页使用 ```typescript // LoginView.vue import { useAuthStore } from '@/stores/auth' const authStore = useAuthStore() const success = await authStore.login('admin', '123456') ``` ### 在其他组件中获取用户信息 ```typescript import { useAuthStore } from '@/stores/auth' const authStore = useAuthStore() console.log(authStore.user) // 用户信息 console.log(authStore.token) // JWT token console.log(authStore.isAuthenticated) // 是否已登录 ``` ### 创建新的 API 接口 ```typescript // 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() ``` ## ✅ 完成清单 ### 前端完成 - [x] Axios 配置 - [x] 请求/响应拦截器 - [x] API 服务层 - [x] 认证 Store - [x] 登录页面 - [x] 类型定义 - [x] 环境配置 - [x] 完整文档 ### 等待后端完成 - [ ] 实现 POST /api/auth/login 接口 - [ ] 返回正确的 JSON 格式 - [ ] 配置 CORS 允许前端请求 - [ ] 其他业务接口 (可选) ## 🎓 后续学习 ### 添加其他 API 参考登录 API,在 `src/api/` 中创建新文件: ``` src/api/ ├── index.ts # axios 实例 ├── auth.ts # ✓ 已完成 ├── users.ts # 待添加 ├── products.ts # 待添加 ├── orders.ts # 待添加 └── ... ``` ### 完整的 CRUD 示例 (用户管理) ```typescript // 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) => http.put(`/users/${id}`, data) // 删 - Delete export const deleteUserApi = (id: number) => http.delete(`/users/${id}`) ``` ## 🔍 调试技巧 ### 查看请求和响应 ```typescript // 在 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 ```typescript // 在浏览器控制台执行 localStorage.getItem('auth_token') // 查看 token localStorage.getItem('user') // 查看用户信息 ``` ### 测试 API 接口 ```bash # 使用 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 实现 现在你需要做的只是: 1. 实现后端登录接口 2. 启动后端和前端 3. 测试登录功能 其他所有的 CRUD 操作都可以按照登录示例的方式进行! 祝你开发愉快!🚀 --- 📚 **相关文档** - [详细 API 集成指南](./API_INTEGRATION_GUIDE.md) - [后端实现参考](./BACKEND_API_EXAMPLE.md) - [快速参考卡片](./API_QUICK_REFERENCE.md)