文字游戏
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.

435 lines
10 KiB

2 weeks ago
# ✨ 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 <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)
```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<User>) =>
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)