vue3+ts

vue3+ts使用Axios

2023-07-09  本文已影响0人  翟小乙

一.创建vue3+ts项目

 npm create vite@latest

二.配置axios

npm install axios -s
import axios from 'axios';

//1. 创建axios对象
const service = axios.create({
    baseURL:'http://testapi.xuexiluxian.cn'
});

//2. 请求拦截器
service.interceptors.request.use(config => {
  return config;
}, error => {
  Promise.reject(error);
});

//3. 响应拦截器
service.interceptors.response.use(response => {
  //判断code码
  return response.data;
},error => {
  return Promise.reject(error);
});

export default service;
  1. 使用typescript语法,进行请求参数限制和响应参数限制
  2. 避免使用和响应的时候出现参数错误,限制类型
import require from './request'

// 请求参数限制
interface IBaiDu{ 
     Url:string,
     method:string,
     params:{
         pageNum:number,
         pageSize:number
     }
}
// 响应参数限制
interface IList{
    courseCover:string
}

// 响应参数限制
interface IResposeBaiDu{
   data:{
    pageInfo:{
        endRow:number,
        list:IList[]
    }
   },
   meta:object
}

export function getBaiduData(config:IBaiDu):Promise<IResposeBaiDu>{

     return require(
        {
            url:config.Url,
            method:config.method,
            data:config.params
        }
     )

}

三. vue3中使用


<template>
    <div class="card">
      <button type="button" @click="getHttpBaidu">发送请求</button>
      
    </div>
   
  </template>

<script setup lang="ts">

import {getBaiduData} from '../types/axios/api'

import { ref } from 'vue'

defineProps<{ msg: string }>()
 
const getHttpBaidu =()=>{

    getBaiduData({
        Url:'/api/course/mostNew',
        method:'post',
        params:{
            pageNum:1,
            pageSize:8
        }
    }).then(res=>{
        console.log('res-------------',res.data.pageInfo.list[0].courseCover);
  
    }).catch(err=>{
        console.log('err------------',err);
        
    })

}

</script> 

四. 注意

在该项目中已经添加了ts引用配置,所以在api中,interface可以单独放到一个ts文件即可,增加可读性
下图中,include包含 ts文件

上一篇 下一篇

猜你喜欢

热点阅读