Vue项目封装管理api

16 篇文章 0 订阅
13 篇文章 0 订阅

Vue项目封装管理api

Vue项目封装api

Vue项目的开发会用到许多、且重复使用的api,所以合理的api管理会减少代码量,也便于后期的更改

1、首先需要在src文件夹下新建一个http文件夹
2、http文件下新建axios.js文件进行管理axios请求
3、http文件下新建api.js文件进行管理api

项目目录如下:
在这里插入图片描述

axios.js代码

// axios 需要下载模块npm i axios 
import axios from 'axios'

// 创建axios的一个实例
let instance = axios.create({
  baseURL: 'xxx', // 基础路径
  timeout: 10000
})

// 请求拦截器
instance.interceptors.request.use(
  function (config) {
    return config
  },
  function (error) {
    return Promise.reject(error) // 错误请求做些什么
  }
)

// 响应拦截器
instance.interceptors.response.use(
  function (response) {
    return response.data
  },
  function (error) {
    return Promise.reject(error) // 对响应错误做点什么
  }
)

export default function (method, url, data = null) {
  method = method.toLowerCase()
  if (method === 'post') {
    return instance.post(url, data)
  } else if (method === 'get') {
    return instance.get(url, { params: data })
  } else if (method === 'delete') {
    return instance.delete(url, { params: data })
  } else if (method === 'put') {
    return instance.put(url, data)
  } else {
    console.error('未知的method' + method)
    return false
  }
}

api.js代码

// 引入axios
import req from './axios'
// 定义接口

// 如:获取商品列表数据
export const getGoodsList = params =>
  req('get', '/goodsList', params)

// 如:获取商品详情数据
export const getGoodsDetail = params =>
  req('get', '/goodsDetail', params)

HelloWorld.vue调用api接口

<template>
  <div class='hello'>
    <el-row>
      <el-button type='primary' @click='click()'>获取商品列表数据</el-button>
      <el-button type='primary' @click='click2()'>获取商品详情数据</el-button>
    </el-row>
  </div>
</template>

<script>
import { getGoodsList, getGoodsDetail } from '@/http/api.js' // 导入接口
export default {
  name: 'HelloWorld',
  data () {
    return {
      // 参数
      query: {
        category: 1,
        pn: 1,
        page: 1,
        rn: 30,
      }
    }
  },
  methods: {
    click () {
      getGoodsList(this.query).then((res) => {
        console.log('获取商品列表的数据如下:', res)
      })
    },
    click2 () {
      getGoodsDetail({ ...this.query, goodid: 123 }).then((res) => {
        console.log('获取商品详情的数据如下:', res)
      })
    }
  }
}
</script>
<style scoped>

</style>

这里只有点击进行获取数据,并未渲染到视图中,且基础路径并未填写

基本的封装过程即是这样,如有问题欢迎提出,共同学习探讨,不惜勿怪,谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值