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

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 步:测试登录

  1. 访问 http://localhost:5173
  2. 输入用户名和密码
  3. 点击登录
  4. 应该看到"登录成功"提示并跳转到仪表板

第 5 步:验证请求

  1. 打开浏览器开发者工具 (F12)
  2. 点击 Network 标签
  3. 再次登录
  4. 看到 POST /api/auth/login 请求
  5. 点击查看请求和响应的详细信息

📝 代码使用示例

在登录页使用

// 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 实现

现在你需要做的只是:

  1. 实现后端登录接口
  2. 启动后端和前端
  3. 测试登录功能

其他所有的 CRUD 操作都可以按照登录示例的方式进行!

祝你开发愉快!🚀


📚 相关文档