在vue项目中一般是通过axios进行接口请求,axios已经帮我们做了很多事,但是在实际项目中还需要进行二次封装才能更好的运用在我们的项目中 axios中文文档

Axios 封装

  1. // utils/request.ts
  2. import Axios, { AxiosRequestConfig, AxiosResponse, AxiosPromise } from 'axios'
  3. import { IApiResponse } from '@/types'
  4. import { stringify } from 'qs'
  5. import config from '@/config'
  6. const server = Axios.create({
  7. baseURL: config.apiConfig.baseUrl,
  8. timeout: config.apiConfig.timeout,
  9. withCredentials: config.apiConfig.withCredentials
  10. })
  11. /**
  12. * 请求拦截
  13. */
  14. server.interceptors.request.use((config: AxiosRequestConfig) => {
  15. // 如果需要添加token可以在这里处理
  16. return config
  17. }, error => {
  18. return Promise.reject(error)
  19. })
  20. /**
  21. * 响应拦截
  22. */
  23. server.interceptors.response.use((response: AxiosResponse) => {
  24. // 这里可以对响应进行统一处理
  25. return response
  26. }, error => {
  27. // 可以对错误进行统一处理,弹窗提示
  28. return Promise.reject(error)
  29. })
  30. /**
  31. * 封装post请求,在api模块直接调用
  32. * -url 请求地址
  33. * -params 参数
  34. * -isQs 是否将参数序列化
  35. */
  36. export const postApi = (url: string, params?: any, isQs?: boolean): AxiosPromise<IApiResponse> => {
  37. return server({
  38. url,
  39. method: 'post',
  40. data: isQs ? stringify(params) : params
  41. })
  42. }
  43. /**
  44. * 封装get请求,在api模块直接调用
  45. * -url 请求地址
  46. * -query 参数
  47. */
  48. export const getApi = (url: string, query: any): AxiosPromise<IApiResponse> => {
  49. return server({
  50. url,
  51. method: 'get',
  52. params: query
  53. })
  54. }
  55. // 也可以将put,delete进行封装

封装好axios后我们在src目录下创建api模块管理所有的api接口

  1. // user.ts
  2. import { postApi } from '@/utils/request'
  3. // 账号密码登录
  4. export const loginByUsername = (params: any) => postApi('/auth/login', params, true)

登录时调用api即可

  1. // login.vue
  2. <script setup lang='ts'>
  3. import { reactive, ref } from 'vue'
  4. import type { IloginForm } from '@/types'
  5. import { loginByUsername } from '@/api/user'
  6. const userInfo = reactive<IloginForm >({
  7. username:'',
  8. password:''
  9. })
  10. // 账号密码登录
  11. const loginHandle = async () => {
  12. const data = await loginByUsername (userInfo)
  13. // 对登录信息进行本地缓存
  14. }
  15. </script>

axios封装到这里基本完成了,根据实际的需要在这个基础上进行修改即可