axios封装和接口管理

1.为什么封装axios ?

答:axios 的 API 很友好,你完全可以很轻松地在项⽬中直接使⽤。 不过随着项⽬规模增⼤,如果每发起⼀次 HTTP 请求,就要把这些⽐如设置超时时间、设置请求头、根据项⽬环境判断使⽤哪个请求地址、错误处理等等操作,都需要写⼀遍 这种重复劳动不仅浪费时间,⽽且让代码变得冗余不堪,难以维护。为了提⾼我们的代码质量,我们应该在项⽬中⼆次封装⼀下 axios 再使⽤

2.如何封装 ?

封装的同时,你需要和 后端协商好⼀些约定,请求头,状态码,请求超时时间......

  • 设置接⼝请求前缀:根据开发、测试、⽣产环境的不同,前缀需要加以区分
  • 请求头 : 来实现⼀些具体的业务,必须携带⼀些参数才可以请求(例如:会员业务)
  • 状态码: 根据接⼝返回的不同 status , 来执⾏不同的业务,这块需要和后端约定好
  • 请求⽅法:根据 get 、 post 等⽅法进⾏⼀个再次封装,使⽤起来更为⽅便
  • 请求拦截器: 根据请求的请求头设定,来决定哪些请求可以访问
  • 响应拦截器: 这块就是根据后端返回来的状态码判定执⾏不同业务

3.Axios 封装及接口管理

在src目录中创建utils/request.js 封装 axios ,开发者需要根据后台接口做修改。

  •  service.interceptors.request.use 里可以设置请求头,比如设置 token
  • service.interceptors.response.use 里可以对接口返回数据处理,比如 401 删除本地信息,重新登录
//引入axios
import axios from 'axios'
// 引入vuex
import store from '@/store'
// 引入vant的加载动画
import { Toast } from 'vant'
// 根据环境不同引入不同api地址,需要配置后使用
import { baseUrl } from '@/config'
// 引入进度条动画(需要下载 npm i --save nprogress 依赖)
import Nprogress from 'nprogress' 
// 引入进度条的样式表
import "nprogress/nprogress.css"
// 创建一个axios
const service = axios.create({
  baseURL: baseUrl, // 配置axios基地址
  //withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})
// request 拦截器 request interceptor
service.interceptors.request.use(
  config => {
	// 在 response 拦截器中, 展示进度条 Nprogress.start()
	Nprogress.start()
    // 不传递默认开启loading
    if (!config.hideloading) {
      // loading
      Toast.loading({
        forbidClick: true
      })
    }
    if (store.state.token) {
      config.headers['Authorization'] = store.state.token
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
// respone拦截器
service.interceptors.response.use(
  response => {
	  // 在 response 拦截器中, 隐藏进度条 Nprogress.done()
	  Nprogress.done()
	  //清除loading
    Toast.clear()
    const res = response.data
    if (res.status && res.status !== 200) {
      // 登录超时,重新登录
      if (res.status === 401) {
        store.dispatch('FedLogOut').then(() => {
          location.reload()
        })
      }
      return Promise.reject(res || 'error')
    } else {
      return Promise.resolve(res)
    }
  },
  error => {
    Toast.clear()
    console.log('err' + error) // for debug
    return Promise.reject(error)
  }
)
export default service

4.接口管理

在utils/api.js 文件夹下统一管理接口

//将封装的axios引入到接口管理页
import service from './request.js'
//获取短信验证码接口
export function smsCode(arg) {
	return service({
		// url:会拼接与封装aixos的基地址
		url: "/smsCode",
		// data:要传递的请求参数
		data: arg,
		// 请求方法
		method: "post"
	})
}

5.如何调用

在vue要使用的组件中引入

//引入要使用的接口
import { smsCode,login } from '@/utils/api.js'
	export default {
		data() {
			return {
				form:{
					password:"",
					tel:"",
				},
				timer:"",
				statu:""
			}
		},
		methods: {
		    async login(){
				if(this.form.code=="" && this.form.tel==""){
					this.$toast.fail('手机号或者验证码不能为空')
					return false
				}
				var a=await login({
                    //请求参数
					mobile:this.form.tel,
					type:1,
					client:"1",
					password:this.form.password
				})
				console.log(a)
			},
       }


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值