VUE3:统一封装axios访问接口

一、代码整体结构

使用 export default 导出一个对象,该对象包含了多个方法,每个方法对应一个与后端交互的 API 请求操作。从功能划分来看,涵盖了用户管理、角色管理、菜单管理、API 管理、部门管理以及审计日志和客户管理等多个模块的常见操作,方便前端在不同业务场景下调用对应的后端接口。

使用方法:

二、举例

  1. 登录相关

    • login: (data) => request.post('/base/access_token', data, { noNeedToken: true })
      • 这是登录方法,使用 post 请求发送登录数据到 /base/access_token 接口。

      • 参数 data 是包含登录信息(如用户名、密码等)的对象

      • { noNeedToken: true } 表示这个请求不需要携带 token,因为只有登录成功后才能获取到 token 用于后续请求的身份验证。

  2. 获取用户信息

    • getUserInfo: () => request.get('/base/userinfo')
      • 通过 get 请求获取当前登录用户的信息,调用的是 /base/userinfo 接口。

      • 这个方法没有参数,返回的是后端返回的用户详细信息数据,可用于在前端展示用户相关资料。

三、代码逻辑

统一的请求封装:这里所有的方法都基于 import { request } from '@/utils' 中导入的 request 对象来进行不同类型的 HTTP 请求操作,说明项目中对 Axios 请求进行了统一的封装。这样的封装有很多好处,比如可以在 request 封装中统一处理请求拦截(在请求发送前做一些操作,如添加通用的请求头、对请求数据进行预处理等)、响应拦截(对接收到的响应数据进行统一处理,如判断响应状态码是否正常、对返回数据进行格式化等),方便对整个项目的 HTTP 请求进行集中管理和维护,减少在每个请求方法中重复编写一些通用的请求逻辑代码,提高代码的复用性和可维护性。

四、完整代码分析

  1. 登录相关

    • login: (data) => request.post('/base/access_token', data, { noNeedToken: true })
      • 这是登录方法,使用 post 请求发送登录数据到 /base/access_token 接口。

      • 参数 data 是包含登录信息(如用户名、密码等)的对象。

      • { noNeedToken: true } 表示这个请求不需要携带 token,因为只有登录成功后才能获取到 token 用于后续请求的身份验证。

  2. 获取用户信息

    • getUserInfo: () => request.get('/base/userinfo')
      • 通过 get 请求获取当前登录用户的信息,调用的是 /base/userinfo 接口。

      • 这个方法没有参数,返回的是后端返回的用户详细信息数据,可用于在前端展示用户相关资料。

  3. 获取用户菜单

    • getUserMenu: () => request.get('/base/usermenu')
      • 同样是 get 请求,从 /base/usermenu 接口获取用户对应的菜单权限信息。

      • 用于根据用户权限动态渲染前端菜单,实现不同用户看到不同功能菜单的效果。

  4. 获取用户 API

    • getUserApi: () => request.get('/base/userapi')
      • 通过 get 请求从 /base/userapi 接口获取用户可访问的 API 信息。

      • 这在涉及到接口权限控制的系统中很有用,可以根据用户权限来决定前端能否调用某些接口。

  5. 修改密码

    • updatePassword: (data = {}) => request.post('/base/update_password', data)
      • 使用 post 请求向 /base/update_password 接口发送修改密码的数据。

      • 参数 data 用来包含旧密码和新密码等信息,前端收集用户输入的密码信息后通过这个方法发送给后端进行密码更新操作。

  6. 获取用户列表

    • getUserList: (params = {}) => request.get('/user/list', { params })
      • 通过 get 请求获取用户列表,调用的是 /user/list 接口。

      • 参数 params 可以包含分页信息(如页码、每页大小)、搜索条件(如用户名、邮箱等关键字)等,用于从后端分页、有条件地获取用户数据列表,方便在前端展示用户列表并支持分页和搜索功能。

  7. 根据 ID 获取用户信息

    • getUserById: (params = {}) => request.get('/user/get', { params })
      • 这是一个 get 请求,用于根据用户 ID 从 /user/get 接口获取特定用户的信息。

      • 参数 params 中会包含用户 ID 等关键信息,以便后端根据 ID 查找到对应用户并返回详细信息,可用于在编辑用户信息等场景下先获取当前用户的数据进行展示和修改。

  8. 创建用户

    • createUser: (data = {}) => request.post('/user/create', data)
      • 使用 post 请求向 /user/create 接口发送创建新用户的数据。

      • 参数 data 包含了新用户的各项信息,如用户名、密码、邮箱、角色等,前端在用户填写完创建用户表单后,通过这个方法将数据发送给后端进行用户创建操作。

  9. 更新用户

    • updateUser: (data = {}) => request.post('/user/update', data)
      • 也是 post 请求,用于向 /user/update 接口发送更新用户信息的数据。

      • 参数 data 包含需要更新的用户信息,如用户 ID(用于标识要更新的用户)、新的用户名、邮箱、角色等字段,实现对已存在用户信息的修改。

  10. 删除用户 * deleteUser: (params = {}) => request.delete(/user/delete, { params }) * 使用 delete 请求调用 /user/delete 接口来删除用户。

    • 参数 params 中包含要删除的用户 ID 等信息,后端根据这个 ID 执行删除对应用户的操作。

  11. 重置密码 * resetPassword: (data = {}) => request.post(/user/reset_password, data)

    • 通过 post 请求向 /user/reset_password 接口发送重置密码的数据。

    • 参数 data 可能包含用户 ID、新的默认密码等信息,用于帮助用户重置其密码,比如在忘记密码或者管理员重置用户密码的场景下使用。

  12. 获取角色列表 * getRoleList: (params = {}) => request.get('/role/list', { params })

    • get 请求,用于从 /role/list 接口获取角色列表。

    • 参数 params 可以包含分页、搜索条件等,方便在前端展示角色列表并支持相应操作,和获取用户列表方法类似,只是操作对象变成了角色。

  13. 创建角色 * createRole: (data = {}) => request.post('/role/create', data)

    • post 请求向 /role/create 接口发送创建新角色的数据。

    • 参数 data 包括角色名称、描述、权限等信息,用于在系统中添加新的角色。

  14. 更新角色 * updateRole: (data = {}) => request.post('/role/update', data)

    • 也是 post 请求,向 /role/update 接口发送更新角色信息的数据。

    • 参数 data 包含角色 ID(标识要更新的角色)、新的角色名称、描述、权限等信息,实现对已有角色信息的修改。

  15. 删除角色 * deleteRole: (params = {}) => request.delete('/role/delete', { params })

    • 使用 delete 请求调用 /role/delete 接口删除角色。

    • 参数 params 里有要删除的角色 ID 等信息,后端据此执行删除操作。

  16. 更新角色授权 * updateRoleAuthorized: (data = {}) => request.post('/role/authorized', data)

    • 通过 post 请求向 /role/authorized 接口发送更新角色授权的数据。

    • 参数 data 包含角色 ID 以及对应的授权信息(比如可以访问哪些菜单、API 等),用于对角色的权限进行重新分配和设置。

  17. 获取角色授权信息 * getRoleAuthorized: (params = {}) => request.get('/role/authorized', { params })

    • get 请求,从 /role/authorized 接口获取角色的授权信息。

    • 参数 params 中有角色 ID 等信息,返回该角色当前被授权的菜单、API 等详细权限内容,在展示角色权限或者进行权限调整时很有用。

  18. 获取菜单列表 * getMenus: (params = {}) => request.get('/menu/list', { params })

    • get 请求获取菜单列表,调用 /menu/list 接口。

    • 参数 params 可能包含分页、搜索条件等,用于在前端展示菜单列表并支持相应操作,方便对菜单进行管理。

  19. 创建菜单 * createMenu: (data = {}) => request.post('/menu/create', data)

    • 使用 post 请求向 /menu/create 接口发送创建新菜单的数据。

    • 参数 data 包括菜单名称、路径、父菜单 ID(如果有的话)、排序等信息,用于在系统中添加新的菜单项。

  20. 更新菜单 * updateMenu: (data = {}) => request.post('/menu/update', data)

    • post 请求向 /menu/update 接口发送更新菜单信息的数据。

    • 参数 data 包含菜单 ID(标识要更新的菜单)、新的菜单名称、路径、排序等信息,实现对已有菜单信息的修改。

  21. 删除菜单 * deleteMenu: (params = {}) => request.delete('/menu/delete', { params })

    • delete 请求调用 /menu/delete 接口删除菜单。

    • 参数 params 里包含要删除的菜单 ID 等信息,后端根据这个执行删除操作。

  22. 获取 API 列表 * getApis: (params = {}) => request.get('/api/list', { params })

    • get 请求获取 API 列表,调用 /api/list 接口。

    • 参数 params 可能包含分页、搜索条件(如 API 名称关键字等),在前端展示 API 列表并支持操作,便于对 API 进行管理。

  23. 创建 API * createApi: (data = {}) => request.post('/api/create', data)

    • 通过 post 请求向 /api/create 接口发送创建新 API 的数据。

    • 参数 data 包括 API 名称、路径、请求方法、描述等信息,用于在系统中添加新的 API 定义。

  24. 更新 API * updateApi: (data = {}) => request.post('/api/update', data)

    • post 请求向 /api/update 接口发送更新 API 信息的数据。

    • 参数 data 包含 API ID(标识要更新的 API)、新的 API 名称、路径、请求方法、描述等信息,实现对已有 API 信息的修改。

  25. 删除 API * deleteApi: (params = {}) => request.delete('/api/delete', { params })

    • 使用 delete 请求调用 /api/delete 接口删除 API。

    • 参数 params 中包含要删除的 API ID 等信息,后端据此执行删除操作。

  26. 刷新 API * refreshApi: (data = {}) => request.post('/api/refresh', data)

    • 通过 post 请求向 /api/refresh 接口发送数据来刷新 API。

    • 参数 data 可能包含一些和刷新操作相关的配置或者标识信息,用于在系统中更新 API 的某些状态或者重新加载 API 相关缓存等操作。

  27. 获取部门列表 * getDepts: (params = {}) => request.get('/dept/list', { params })

    • get 请求,获取部门列表,调用 /dept/list 接口。

    • 参数 params 包含分页、搜索条件(如部门名称关键字等),用于在前端展示部门列表并支持分页、搜索等操作,方便对部门进行管理。

  28. 创建部门 * createDept: (data = {}) => request.post('/dept/create', data)

    • 使用 post 请求向 /dept/create 接口发送创建新部门的数据。

    • 参数 data 包括部门名称、上级部门 ID(如果有)、部门描述等信息,用于在系统中添加新的部门。

  29. 更新部门 * updateDept: (data = {}) => request.post('/dept/update', data)

    • post 请求向 /dept/update 接口发送更新部门信息的数据。

    • 参数 data 包含部门 ID(标识要更新的部门)、新的部门名称、上级部门 ID、描述等信息,实现对已有部门信息的修改。

  30. 删除部门 * deleteDept: (params = {}) => request.delete('/dept/delete', { params })

    • delete 请求调用 /dept/delete 接口删除部门。

    • 参数 params 里包含要删除的部门 ID 等信息,后端根据这个执行删除操作。

  31. 获取审计日志列表 * getAuditLogList: (params = {}) => request.get('/auditlog/list', { params })

    • 通过 get 请求获取审计日志列表,调用 /auditlog/list 接口。

    • 参数 params 可以包含分页、时间范围、操作类型等搜索条件,方便在前端展示审计日志并支持按条件查询,用于记录和查看系统的操作行为,便于后续的问题排查和安全审计等。

  32. 获取客户列表 * getCustomersList: (params = {}) => request.get('/production/customers/list', { params })

    • get 请求,从 /production/customers/list 接口获取客户列表。

    • 参数 params 包含分页、搜索条件(如客户名称、联系方式等关键字),用于在前端展示客户列表并支持操作,方便对客户信息进行管理,适用于涉及客户相关业务的系统模块。

  33. 创建客户 * createCustomers: (data = {}) => request.post('/production/customers/create', data)

    • 使用 post 请求向 /production/customers/create 接口发送创建新客户的数据。

    • 参数 data 包含客户名称、联系方式、地址等信息,用于在系统中添加新的客户。

  34. 更新客户 * updateCustomers: (data = {}) => request.post('/production/customers/update', data)

    • post 请求向 /production/customers/update 接口发送更新客户信息的数据。

    • 参数 data 包含客户 ID(标识要更新的客户)、新的客户名称、联系方式、地址等信息,实现对已有客户信息的修改。

  35. 删除客户 * deleteCustomers: (params = {}) => request.delete('/production/customers/delete', { params })

    • 通过 delete 请求调用 /production/customers/delete 接口删除客户。

    • 参数 params 里包含要删除的客户 ID 等信息,后端据此执行删除操作。

  36. 获取客户信息 * getCustomers: (params = {}) => request.get('/production/customers/get', { params })

    • get 请求,用于根据客户 ID 等条件从 /production/customers/get 接口获取特定客户的信息。

    • 参数 params 包含客户 ID 等关键信息,返回该客户的详细信息,可用于在编辑客户信息等场景下先获取当前客户的数据进行展示和修改。

### 封装 Axios 并实现跨域请求 #### 创建 Axios 实例并设置默认配置 为了更好地管理和维护 HTTP 请求,在 `src/utils` 文件夹下创建名为 `http.ts` 的文件来封装 Axios。通过这种方式可以集中处理全局配置,如基础 URL 和拦截器。 ```typescript // src/utils/http.ts import axios, { AxiosInstance, AxiosRequestConfig } from &#39;axios&#39;; const service: AxiosInstance = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000 // request timeout }); service.interceptors.request.use( (config: AxiosRequestConfig) => { const token = localStorage.getItem(&#39;token&#39;); if (token && config.headers) { config.headers[&#39;Authorization&#39;] = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ); export default service; ``` 此部分代码定义了一个带有预设选项的新 Axios 实例,并设置了请求前缀路径以及超时时间[^1]。 #### 处理 API 接口管理 按照模块化思路设计API接口层结构,即在 `src/api` 下按功能划分不同子目录存放各自业务逻辑对应的接口函数。例如: ```plaintext ├── api/ │ ├── user.ts # 用户相关接口 │ └── product.ts # 商品相关接口 └── utils/ └── http.ts # Axios实例和服务端交互工具类 ``` 对于具体的接口调用,则可以在相应的 `.ts` 文件内编写如下所示的方法: ```typescript // src/api/user.ts import service from &#39;@/utils/http&#39;; export function getUserInfo(params?: any): Promise<any> { return service.get(&#39;/user/info&#39;, { params }); } ``` 上述例子展示了如何利用之前建立好的 Axios 实例发起 GET 类型的数据获取操作[^3]。 #### 配置 Vite 开发环境下的代理服务器以解决开发阶段的 CORS 错误 由于浏览器同源策略限制,默认情况下前端应用无法直接向不同的域名发送 AJAX 请求。为此可以通过修改构建工具(这里是Vite)的相关配置项来绕过这一障碍。编辑项目的根目录中的 `vite.config.ts` 或者 `vite.config.js` 添加代理规则: ```javascript // vite.config.ts or vite.config.js import { defineConfig } from &#39;vite&#39;; import vue from &#39;@vitejs/plugin-vue&#39;; export default defineConfig({ plugins: [vue()], server: { proxy: { &#39;/api&#39;: { target: &#39;https://example.com&#39;, changeOrigin: true, rewrite: path => path.replace(/^\/api/, &#39;&#39;) } } } }); ``` 这段配置使得当访问 `/api/*` 路径时会被转发到指定的目标地址上执行实际的服务端程序[^4]。 #### 生产环境中部署反向代理服务 除了开发期间借助本地代理外,在生产环境下通常还需要依靠 Nginx 等 Web Server 来完成正式上线后的跨域资源共享(CORS)支持工作。这涉及到调整后端应用程序的安全性和权限控制机制,确保只允许来自特定来源的应用能够成功读取资源数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值