• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

vue中关于axios的简单封装,api集中管理,typescript

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

axios 简单封装

在项目开发中进行项目开发时,对api接口进行集中管理非常重要

由于之前没有怎么封装过,只知道一些简单使用,所以最近根据网上的一些教程试着写了一下

  1. 我在src目录下新建了一个叫api 的文件夹,文件夹里新建了2个ts文件,api.tshttp.ts,
    其中api.ts 用来集中管理后端接口http.ts用来对axios进行封装

  2. 在http.ts中对axios代码进行如下封装(下面是http.ts的完整代码)

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import qs from 'qs'

/**
 * @auther boyyang-love 
 * @NODE_ENV 根据当前环境确定请求地址
 * @development 开发环境、
 * @production 生产环境
 * @debug  测试环境
 */

const server: AxiosInstance = axios.create({
    baseURL: process.env.NODE_ENV == 'development' ? 'http://1905.com': 'http://2020.com' ,
    timeout: 3000,
})

/**
 * axios请求拦截
 * @return 
 * @config
 */
server.interceptors.request.use(
    (config: AxiosRequestConfig): AxiosRequestConfig | Promise<AxiosRequestConfig> => {
        if (config.method == 'get') {
            config.headers.get['Content-Type'] =  'application/x-www-form-urlencoded;charset=utf-8' 
        }
        if (config.method == 'post') {
            config.headers.post['Content-Type'] =  'application/json;charset=utf-8' 
        }
        // const token = '1111111';        
        // token && (config.headers.Authorization = token);
        console.log(config)
        return config;
    },
    (error) => {
        return Promise.reject(error)
    }
)
/**
 * 响应拦截
 * @return 
 * @response
 */

server.interceptors.response.use(
    (response: AxiosResponse<any>): AxiosResponse<any> | Promise<AxiosResponse<any>> => {
        return response
    },
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    console.log('错误请求')
                    break;
                case 401:
                    console.log('未授权,请重新登录')
                    break;
                case 403:
                    console.log('拒绝访问')
                    break;
                case 404:
                    console.log('请求错误,未找到该资源')
                    break;
                case 405:
                    console.log('请求方法未允许')
                    break;
                case 408:
                    console.log('请求超时')
                    break;
                case 500:
                    console.log('服务器端出错')
                    break;
                case 501:
                    console.log('网络未实现')
                    break;
                case 502:
                    console.log('网络错误')
                    break;
                case 503:
                    console.log('服务不可用')
                    break;
                case 504:
                    console.log('网络超时')
                    break;
                case 505:
                    console.log('http版本不支持该请求')
                    break;
                default:
                    console.log(`连接错误${error.response.status}`)
            }
        } else {
            console.log('服务未连接')
        }
        return Promise.resolve(error.response)
    }
)

/**
 * 导出get请求方法
 * @url 请求地址
 * @params get请求参数
 */
export function get(url: string, params?: any): Promise<AxiosResponse> | Promise<AxiosResponse<any>> {
    return new Promise((resolve, reject) => {
        server.get(url, {
            params: params
        }).then((res) => {
            resolve(res.data)
        }).catch((err) => {
            reject(err)
        })
    })
}


/**
 * 导出post请求方法
 * @url 请求地址
 * @params post请求参数
 */

export function post(url: string, params: any): Promise<AxiosResponse> | Promise<AxiosResponse<any>> {
    return new Promise((resolve, reject) => {
        server.post(url, qs.stringify(params)).then((res) => {
            resolve(res.data)
        }).catch((err) => {
            reject(err)
        })
    })
}

  1. 对后端接口进行集中管理(api.ts)
import  {get, post}  from "./https"

export const getHome = (params?: any) => get('/api/home', params)
export const postHome = (params: any) => post('/api/home', params)

  1. 在页面中调用api接口
// 引入
import { getHome } from "@/api/api.ts"

getHome({id: 1}).then((res :any) =>{
   console.log(res)
})

以上就是对axios的简单封装


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap