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.
236 lines
4.7 KiB
236 lines
4.7 KiB
|
2 weeks ago
|
# 🎯 Axios API 集成 - 一句话总结
|
||
|
|
|
||
|
|
## 你问的问题
|
||
|
|
|
||
|
|
> 是不是少了axios相关的东西?调用后台接口,后台接口会传递json数据上来,我应该怎么做?你只用做一个登录示例就可以了。
|
||
|
|
|
||
|
|
## 答案
|
||
|
|
|
||
|
|
✅ **已为你完成!** 完整的 axios 配置和登录 API 示例已创建。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📂 新增文件
|
||
|
|
|
||
|
|
### API 层(前端代码)
|
||
|
|
|
||
|
|
```
|
||
|
|
src/api/
|
||
|
|
├── index.ts ← axios 实例 + 拦截器
|
||
|
|
│ • baseURL 自动添加 API 前缀
|
||
|
|
│ • 请求拦截器自动添加 token
|
||
|
|
│ • 响应拦截器自动处理错误
|
||
|
|
│
|
||
|
|
└── auth.ts ← 登录 API
|
||
|
|
• loginApi(username, password) - 调用 POST /api/auth/login
|
||
|
|
• logoutApi()
|
||
|
|
• getUserInfoApi()
|
||
|
|
• 完整的 TypeScript 类型定义
|
||
|
|
```
|
||
|
|
|
||
|
|
### 环境配置
|
||
|
|
|
||
|
|
```
|
||
|
|
.env.development ← API 地址:http://localhost:3000/api
|
||
|
|
.env.production ← API 地址:https://api.example.com/api
|
||
|
|
.env.local ← 本地覆盖
|
||
|
|
```
|
||
|
|
|
||
|
|
### 文档
|
||
|
|
|
||
|
|
```
|
||
|
|
WHAT_TO_DO_NEXT.md ← 👈 你接下来该做什么(先读这个)
|
||
|
|
API_IMPLEMENTATION_COMPLETE.md ← 完整总结
|
||
|
|
API_INTEGRATION_GUIDE.md ← 详细教程
|
||
|
|
BACKEND_API_EXAMPLE.md ← 后端代码示例
|
||
|
|
API_QUICK_REFERENCE.md ← 快速参考
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 工作流程
|
||
|
|
|
||
|
|
### 简单版本
|
||
|
|
|
||
|
|
```
|
||
|
|
用户登录
|
||
|
|
↓
|
||
|
|
await authStore.login(username, password)
|
||
|
|
↓
|
||
|
|
loginApi(credentials)
|
||
|
|
↓
|
||
|
|
http.post('/auth/login', credentials)
|
||
|
|
↓
|
||
|
|
axios 拦截器处理
|
||
|
|
↓
|
||
|
|
POST http://localhost:3000/api/auth/login
|
||
|
|
↓
|
||
|
|
后端返回 JSON
|
||
|
|
↓
|
||
|
|
axios 拦截器提取 response.data
|
||
|
|
↓
|
||
|
|
前端收到数据
|
||
|
|
↓
|
||
|
|
保存 token 和 user 到 localStorage
|
||
|
|
↓
|
||
|
|
登录成功!
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 💻 后端返回的 JSON 格式
|
||
|
|
|
||
|
|
你的后端需要返回这样的格式:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"code": 200,
|
||
|
|
"message": "登录成功",
|
||
|
|
"data": {
|
||
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||
|
|
"user": {
|
||
|
|
"id": "1",
|
||
|
|
"username": "admin",
|
||
|
|
"email": "admin@example.com",
|
||
|
|
"role": "admin"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**关键点:**
|
||
|
|
- `code` 必须是 200 表示成功
|
||
|
|
- `data.token` 是 JWT,后续请求会自动在 `Authorization: Bearer <token>` 中发送
|
||
|
|
- `data.user` 包含用户信息
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 立即测试
|
||
|
|
|
||
|
|
### 选项 1:使用提供的后端示例
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 创建后端项目
|
||
|
|
mkdir admin-backend && cd admin-backend
|
||
|
|
npm init -y && npm install express cors jsonwebtoken
|
||
|
|
|
||
|
|
# 复制 BACKEND_API_EXAMPLE.md 中的代码到 server.js
|
||
|
|
# 然后运行
|
||
|
|
node server.js
|
||
|
|
|
||
|
|
# 在另一个终端启动前端
|
||
|
|
npm run dev
|
||
|
|
|
||
|
|
# 访问 http://localhost:5173
|
||
|
|
# 输入 admin / 123456 登录
|
||
|
|
```
|
||
|
|
|
||
|
|
### 选项 2:集成你自己的后端
|
||
|
|
|
||
|
|
1. 实现 `POST /api/auth/login` 接口
|
||
|
|
2. 返回上述格式的 JSON
|
||
|
|
3. 配置 CORS
|
||
|
|
4. 启动后端
|
||
|
|
5. 运行 `npm run dev`
|
||
|
|
6. 测试登录
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 代码示例
|
||
|
|
|
||
|
|
### 在组件中使用(已更新)
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { useAuthStore } from '@/stores/auth'
|
||
|
|
|
||
|
|
const authStore = useAuthStore()
|
||
|
|
|
||
|
|
// 登录
|
||
|
|
const success = await authStore.login('admin', '123456')
|
||
|
|
if (success) {
|
||
|
|
console.log('登录成功!')
|
||
|
|
}
|
||
|
|
|
||
|
|
// 获取当前用户
|
||
|
|
console.log(authStore.user)
|
||
|
|
console.log(authStore.token)
|
||
|
|
|
||
|
|
// 登出
|
||
|
|
await authStore.logout()
|
||
|
|
```
|
||
|
|
|
||
|
|
### 添加新的 API(参考登录示例)
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
// src/api/users.ts
|
||
|
|
import http from './index'
|
||
|
|
|
||
|
|
export const getUsersApi = () => {
|
||
|
|
return http.get('/users')
|
||
|
|
}
|
||
|
|
|
||
|
|
export const createUserApi = (data) => {
|
||
|
|
return http.post('/users', data)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 在组件中使用
|
||
|
|
const response = await getUsersApi()
|
||
|
|
if (response.code === 200) {
|
||
|
|
console.log(response.data)
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ 检查清单
|
||
|
|
|
||
|
|
### 前端(✅ 已完成)
|
||
|
|
|
||
|
|
- [x] Axios 配置
|
||
|
|
- [x] 拦截器设置
|
||
|
|
- [x] API 服务层
|
||
|
|
- [x] 登录示例
|
||
|
|
- [x] TypeScript 类型
|
||
|
|
- [x] 环境配置
|
||
|
|
|
||
|
|
### 你需要做(⏳ 待实施)
|
||
|
|
|
||
|
|
- [ ] 实现后端登录接口
|
||
|
|
- [ ] 配置 CORS
|
||
|
|
- [ ] 启动后端
|
||
|
|
- [ ] 测试集成
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 快速参考
|
||
|
|
|
||
|
|
| 需求 | 文件 | 说明 |
|
||
|
|
|------|------|------|
|
||
|
|
| 快速上手 | `WHAT_TO_DO_NEXT.md` | 下一步该做什么 |
|
||
|
|
| 详细教程 | `API_INTEGRATION_GUIDE.md` | 完整 API 使用指南 |
|
||
|
|
| 后端参考 | `BACKEND_API_EXAMPLE.md` | Node.js/Python 实现 |
|
||
|
|
| 代码参考 | `API_QUICK_REFERENCE.md` | 快速代码片段 |
|
||
|
|
| 原理说明 | `API_IMPLEMENTATION_COMPLETE.md` | 完整工作流程 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎉 总结
|
||
|
|
|
||
|
|
```
|
||
|
|
✅ 前端:完整的 API 层 + 登录示例
|
||
|
|
⏳ 你的工作:实现后端 API + 配置 CORS + 测试
|
||
|
|
|
||
|
|
预计时间:15 分钟
|
||
|
|
结果:功能完整的登录系统
|
||
|
|
```
|
||
|
|
|
||
|
|
**现在就开始吧!** 🚀
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**相关文档快速链接:**
|
||
|
|
- 👉 [接下来该做什么](./WHAT_TO_DO_NEXT.md)
|
||
|
|
- 📖 [详细集成指南](./API_INTEGRATION_GUIDE.md)
|
||
|
|
- 💻 [后端代码示例](./BACKEND_API_EXAMPLE.md)
|
||
|
|
- ⚡ [快速参考](./API_QUICK_REFERENCE.md)
|