vue3+ts+axios请求封装

1.首先安装axios

  1. npm install axios

2.request.ts统一封装的请求接口(本人是在utils里面新建 request.ts)

  1. import axios from 'axios'
  2. import { ElMessage } from 'element-plus'
  3. // import { getToken } from '@/utils/auth'
  4. export const request =(options:any)=> {
  5. return new Promise((resolve, reject) => {
  6. // create an axios instance
  7. const service = axios.create({
  8. // baseURL: process.env.BASE_API, // api 的 base_url
  9. baseURL: '/api',
  10. timeout: 80000 // request timeout
  11. })
  12. // request interceptor
  13. service.interceptors.request.use(
  14. (config:any) => {
  15. let token:string =''//此处换成自己获取回来的token,通常存在在cookie或者store里面
  16. if (token) {
  17. // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
  18. config.headers['X-Token'] = token
  19. config.headers.Authorization = + token
  20. }
  21. return config
  22. },
  23. error => {
  24. // Do something with request error
  25. console.log("出错啦", error) // for debug
  26. Promise.reject(error)
  27. }
  28. )
  29. // response interceptor
  30. service.interceptors.response.use(
  31. (response:any) => {
  32. return response.data
  33. },
  34. error => {
  35. console.log('err' + error) // for debug
  36. if(error.response.status == 403){
  37. ElMessage.error('错了')
  38. }else{
  39. ElMessage.error('服务器请求错误,请稍后再试')
  40. }
  41. return Promise.reject(error)
  42. }
  43. )
  44. // 请求处理
  45. service(options)
  46. .then((res) => {
  47. resolve(res)
  48. })
  49. .catch((error) => {
  50. reject(error)
  51. })
  52. })
  53. }
  54. export default request

跟js一样的写法啦,就是把ts类型加上

3.调用api -service

  1. import {request} from '@/utils/request'
  2. // 调用测试
  3. export function getTest() {
  4. return request({
  5. url: '/xxxxx/',//此处为自己请求地址
  6. method: 'get'
  7. })
  8. }
  9. 4.调用过程为页面引入api文件,再由api调用统一的请求函数请求数据
  10. import { getTest} from "@/service/test";
  11. onBeforeMount(() => {
  12. getTest()
  13. .then(response => {
  14. console.log("结果", response);
  15. })
  16. .catch(error => {
  17. console.log('获取失败!')
  18. });
  19. })

这些的前提是配置了代理转发。