vue axios请求封装

新建utils文件夹,在该文件夹下新建request.js文件

在这里插入图片描述
request.js

import axios from "axios";
// 创建一个axios的app

const request = axios.create({
    baseURL:'http://127.0.0.1:8000/api/v1/',
    timeout:5000
})

// 暴露 
export default request

在发送请求的组件中导入request.js文件
在这里插入图片描述

在这里插入图片描述

进一步优化
根据功能新建不同的js文件
在这里插入图片描述

以students.js为例子

import  request from '../utils/request'

// restful 获取【所有,某一个,添加,修改,删除】

/* 获取所有 */
const getAll = (params)=>{
    // request
    return request({
        method:'get',
        url:'students/',
        params
    })
}

/* 添加 */
const add= (data)=>{
    // request
    return request({
        method:'post',
        url:'students/',
        data
    })
}

/* 获取单一数据 */
const getOne= (id)=>{
    // request
    return request({
        method:'get',
        url:`students/${id}`,
    })
}

/* 修改数据 */
const edit= (id,data)=>{
    // request
    return request({
        method:'put',
        url:`students/${id}`,
        data
    })
}

/* 删除 */
const del= (id)=>{
    // request
    return request({
        method:'delete',
        url:`students/${id}`,
    })
}

export default {
    getAll,getOne,edit,del,add
}

学生组件中导入

在这里插入图片描述

在这里插入图片描述
其他的也一样,改个路由就行了
在这里插入图片描述
这样导入特别麻烦,如果有很多个那就得导入很多遍
在这里插入图片描述

api 下新建index.js
在这里插入图片描述

在这里插入图片描述

可以进一步封装,因为这么多请求其实只有url不一样
在这里插入图片描述

在这里插入图片描述


import request from "../utils/request";

// 通过面向对象的方式 =》类

export default class APIBase{
    // 定义属性 ts
    public name:String;
    
    // 构造器
    constructor(name:string){
        this.name = name
    }

    //获取所有
    // 方法 这里的?表面参数可传可不传
    public getAll = (params?:any)=>{
        return request({
            method:'get',
            url:`$(this.name)/`,
            params
        })
    }

    // 添加
    public add = (data:any)=>{
        return request({
            method:'post',
            url:`$(this.name)/`,
            data
        })
    }

    //获取一个
    // 方法 这里的?表面参数可传可不传
    public getOne = (id?:any)=>{
        return request({
            method:'get',
            url:`${this.name}/${id}/`,
        })
    }

    //修改
    // 方法 这里的?表面参数可传可不传
    public edit = (id:any,data:any)=>{
        return request({
            method:'put',
            url:`${this.name}/${id}/`,
            data
        })
    }

    // 删除
    // 方法 这里的?表面参数可传可不传
    public del = (id:any)=>{
        return request({
            method:'delete',
            url:`${this.name}/${id}/`,
        })
    }
}

在index.js中
在这里插入图片描述
此时可以正常访问


// 导入所有api
import APIBase from "./apibase";

// 实例化对象
let students = new APIBase('students')

let majors = new APIBase('majors')

let facultys = new APIBase('facultys')

// 封装并发布
export default {
    students,
    majors,
    facultys
}

如果想添加别的方法,可以继承类

配置全局变量
在全局注册
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这样是可以正常访问的
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值