资讯专栏INFORMATION COLUMN

vue封装axios基本思路

microcosm1994 / 2699人阅读

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。在vue项目之中使用axios是一个非常明智的选择,因为vue官方已经宣称不再维护vue-resource,并且推荐使用axios.

1 为什么选择axios?

使用axios可以统一做请求-响应拦截,例如响应时我们将响应信息拦截起来,判断状态码,从而弹出报错信息

设定请求超时,例如3000ms未响应则停止请求

基于promise,可以很方便地使用then或者catch来处理请求

自动转换json数据

2 如何使用?

可以使用以下方式

1. npm install axios --save
2. bower install axios --save
3. 

3 封装http请求
官网给定的实例:

axios.get("/user?ID=12345")
  .then(function(response){
    console.log(response);
  })
  .catch(function(err){
    console.log(err);
  });

在此基础上我们应该再次封装http中的post get put delete方法,在具体页面只需要调用接口函数以及传入params即可,其余例如url,header之类的我们应该进行封装。
例如在index.vue之中使用一个函数来实现通过id来获取对应的用户信息,返回结果在then方法的result之中

API.getUserInfo({id:"01"}).then((result)=>{})

4 实现思路
新建一个文件,构建一个axios对象实例 例如axios.js

import axios from "axios";
import router from "../router";
// 创建axios实例
const service = axios.create({            
  timeout: 30000 // 请求超时时间                                   
})
// 添加request拦截器 
service.interceptors.request.use(config => {         
  return config
}, error => {
  Promise.reject(error)
})
// 添加respone拦截器
service.interceptors.response.use(                  
  response => {
    let res={}; 
    res.status=response.status
    res.data=response.data;
    return res;
  },
  error => {
    if(error.response && error.response.status == 404){
     router.push("/blank.vue")
    }
   
        
    return Promise.reject(error.response)
  }
)

export function get(url, params = {}) {
  params.t = new Date().getTime(); //get方法加一个时间参数,解决ie下可能缓存问题.
  return service({
    url: url,
    method: "get",
    headers: {     
    },
    params
  })
}


//封装post请求
export function post(url, data = {}) { 
  //默认配置 
  let sendObject={
    url: url,
    method: "post",
    headers: {
      "Content-Type":"application/json;charset=UTF-8"       
    },
    data:data
  };
  sendObject.data=JSON.stringify(data);
  return service(sendObject)
}

//封装put方法 (resfulAPI常用)
export function put(url,data = {}){
  return service({
    url: url,
    method: "put",
    headers: {
      "Content-Type":"application/json;charset=UTF-8"       
    },
    data:JSON.stringify(data)
  }) 
}
//删除方法(resfulAPI常用)
export function deletes(url){
  return service({
    url: url,
    method: "delete",
    headers: {}
  }) 
}

//不要忘记export
export {
  service
}

上述代码主要实现一个基本的axios封装,请求成功时获取响应对象,我们主需要获取几个有用的信息即可,例如状态码,数据即可,同时处理错误,例如返回404我们跳转到一个新界面

封装接口函数
新建文件,例如api.js

import {get, post,deletes,put} from "./axios.js" ;//导入axios实例文件中方法
let bsae_api = process.env.BASE_API ? "./"+process.env.BASE_API :".." //获取项目api请求地址
//根据id获取用户信息
export const getUserInfoById=(id)=>{
    return get(`${bsae_api}/web/user/${id}`); //resfulapi风格
}

具体页面使用 index.vue

import API from "@/utils/api"
getUserInfo(){
  API.getUserInfoById("01).then((result)=>{
   }).catch((error)=>{
 })
}

以上就是一些axios封装的基本介绍

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108150.html

相关文章

  • Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置

    摘要:今天松哥就带大家来看看的使用。此时启动前端项目,就可以顺利发送网络请求了。松哥将自己封装的网络请求库已经放在上,欢迎大家参考。前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个项目本身也停止维护,目前建议使用的方案是 axios。今天松哥就带大...

    Ku_Andrew 评论0 收藏0
  • iMap | 一款基于 Electron 和 Vue 的跨平台旅行地图生成器

    摘要:请求错误请求代码封装与基本一致,只是将换成即可。关于的使用是个能把组件的共享状态抽取出来,当做一个全局单例模式进行管理。首先确保你的已经安装,运行来安装。 项目地址:https://huangxizhou.com/project/iMap 技术栈 Vue.js Vuex Axios Webpack Leancloud(express) Echarts Electron(electr...

    dingda 评论0 收藏0
  • vuecli3 vant rem 移动端框架方案

    摘要:描述基于适配方案封装,构建手机端模板脚手架帮你做好的配置有多环境开发封装适配方案生产环境优化首屏加速低版本浏览器兼容环境发布脚本可以上手直接写代码多环境开发之前写过一个多环境的方案,是基于的多环境配置方案传送门最近新的项目采用了开始了 描述 基于vue-cli3.0+webpack 4+vant ui + sass+ rem适配方案+axios封装,构建手机端模板脚手架 帮你做好的配置...

    since1986 评论0 收藏0
  • vue+node+mongodb 搭建一个完整博客

    摘要:开发一个完整博客流程前言前段时间刚把自己的个人网站写完,于是这段时间因为事情不是太多,便整理了一下,写了个简易版的博客系统服务端用的是框架进行开发技术栈目录结构讲解的配置文件放置代码文件项目参数配置的文件日志打印文件项目依赖模块 Vue + Node + Mongodb 开发一个完整博客流程 前言 前段时间刚把自己的个人网站写完, 于是这段时间因为事情不是太多,便整理了一下,写了个简易...

    Miracle_lihb 评论0 收藏0
  • VUE知识点集锦

    摘要:载入前后在阶段,实例的和都初始化了,但还是挂载之前为虚拟的节点,还未替换。类似于,不同在于提交的是,而不是直接变更状态可以包含任意异步操作。 vue基础 1、 router 路由与 a 标签的区别:https://www.jianshu.com/p/34b...2、 VUE双向绑定的原理: 答:VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个...

    Tecode 评论0 收藏0

发表评论

0条评论

microcosm1994

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<