vue项目中axios的基本使用和简单封装

axios中文文档官网  http://www.axios-js.com/docs/

一:不封装直接使用

  npm install axios

  在main.js里面引用如下

 import axios from 'axios'
Vue.prototype.$axios = axios;

  在自己的组件中然后使用

getInfo() {
let userInfo = {
name: 'javascript',
pass: 'good'
};
let access_token = 'allow_token';
this.$axios({
method: 'post', // 请求方式
url: '/api/user', // 请求url
data: userInfo, //传参数据
headers: {Authorization: access_token} // 携带用户信息token
}).then(res => {
console.log(res); // 请求成功之后返回的值,在此处进行数据展示处理
}).catch(err => {
console.log(err); // 请求失败返回
})
}

二:简单封装之后进行使用

  npm install axios

我们在src文件夹下面新建apis文件夹。

然后主要需要两个文件,一个是axios.js文件,配置基本选项;一个是helpers.js文件,主要进行请求封装;其他的js文件则是具体使用。如下:

   

  axios.js文件如下

import axios from 'axios'
import ELEMENT from 'element-ui';
import router from '../router';
// export const root = process.env.API_ROOT; // 此处我们需要两个axios实例,login请求与其他页面请求稍微有点差别,
// login需要获取到一些用户数据,所以我们单独处理,其他则封装复用即可
// login完成之后,一般获取用户token,此时我们将用户token存到sessionStorage里面即可
const loginInstance = axios.create({
baseURL: '',
// headers: {'Content-Type': 'application/x-www-form-urlencoded'},
withCredentials: false
}); const instance = axios.create({
baseURL: '',
// headers: {'Content-Type': 'application/x-www-form-urlencoded'},
withCredentials: false
});
let access_token = 'jdshfjdshfjdsf'; // 假设这个是登录之后获取到的用户token // 下面的配置是一层拦截,即我们在这个请求发出之前需要做点什么
// 此处是请求发出之前我们需要配置{headers: {Authorization: access_token}}
instance.interceptors.request.use(
// 成功
config => {
if (access_token) {
// config.headers.Authorization = `Bearer ${access_token}`
config.headers.Authorization = access_token;
}
return config;
},
// 失败
error => {
return Promise.reject(error);
}
); // 在请求完成之后我们需要做点什么,简单就是将后端的response进行返回即可
instance.interceptors.response.use(
// 请求成功
response => {
return response;
},
// 请求失败
error => {
if (error.response) {
// 失败则根据其状态码进行对应提示处理
switch (error.response.status) {
case 401:
sessionStorage.removeItem('access_token');
sessionStorage.removeItem('userInfo');
router.push('/login');
ELEMENT.Message.error('身份过期,请重新登录');
break;
case 404:
console.log('请求无效');
break;
case 504:
console.log('请求超时');
break;
case 500:
console.log('请求失败');
break;
case 420:
console.log('请求失败');
break;
}
}
return Promise.reject(error);
}); // 基本封装配置完成,将这两个变量导出即可,方便其他页面使用
export {loginInstance, instance}

helpers.js文件如下(以下常用的login,get,post,del,put,其他暂时不用了解)

import axios from 'axios';
import {loginInstance, instance} from './axios'; // 定义状态码
const STATUS_OK = 200; // 请求成功
const STATUS_DEL = 204; // del请求成功
const STATUS_CREATE = 201; // 新增成功 export function login(url) {
return function (data) {
return loginInstance.post(url, data).then(res => {
const { status, data } = res;
if (status === STATUS_OK) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response));
};
} export function get(url) {
// url为地址 params为请求携带参数 config为可能用到的配置
// 如在进行将table表格数据导出为excel时,我们需要传递一个config,
// outputExcel({resCode:this.resCode}, {responseType: 'blob'})
// 具体使用后面说明
return function (params, config) {
return instance.get(url, {
...config,
params
}).then(res => {
const { status, data } = res;
if (status === STATUS_OK) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response.data));
};
} export function getJson(url) {
return function () {
return axios.get(url).then(res => {
const { status, data } = res;
if (status === STATUS_OK) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response.data));
};
} export function getAll(...urlList) {
return function () {
const getList = urlList.map(url => axios.get(url));
return axios.all(getList).then(axios.spread((...resList) => {
return resList.map(res => res.data);
})).catch(err => Promise.reject(err.response.data));
};
} export function post(url) {
return function (data, config) {
return instance.post(url, data, config).then(res => {
const { status, data } = res;
if (status === STATUS_OK || status === STATUS_CREATE) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response.data));
};
} export function del(url) {
return function (params, config) {
return instance.delete(url, {
...config,
params
}).then(res => {
const { status } = res;
if (status === STATUS_DEL || status === STATUS_OK) {
return;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response));
};
} export function put(url) {
return function (data, config) {
return instance.put(url, data, config).then(res => {
const { status, data } = res;
if (status === STATUS_OK) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response.data));
};
} export function getBlob(url) {
return function (params, config) {
return instance.get(url, {
params,
...config,
responseType: 'blob'
}).then(res => {
const { status, data } = res;
if (status === STATUS_OK) {
const URL = window.URL || window.webkitURL;
return URL.createObjectURL(data);
}
});
};
} export function form(url) {
return function (data, config) {
return instance.post(url, data, {
...config,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
}
}).then(res => {
const { status, data } = res;
if (status === STATUS_OK || status === STATUS_CREATE) {
return data;
} else {
return Promise.reject(res);
}
}).catch(err => Promise.reject(err.response.data));
};
}

以上封装已经完成,那么接下来则是具体使用了,使用如下

假设此时我们需要登录,则使用封装好的login

apis文件夹下面新建login.js文件

login.js文件

// 导入封装的login
import {login} from './helpers' // 传入url,然后将此userLogin导出,在login.vue文件中使用传如data即可
export const userLogin = login('/abc/d/e');

然后在login.vue文件中发送请求如下:

// 引入userLogin
import { userLogin } from '~api/login' // 点击提交按钮时发送请求
methods: {
onSubmit(param) {
userLogin(param).then(res =>
{
console.log(res)
}).catch(err => {console.log(err)})
}
}

至此,祝大家使用愉快

axios入门使用的更多相关文章

  1. Day06_商品分类(vuetify-nginx-cors)与品牌查询

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  2. 一个后端开发的 Vue 笔记【入门级】

    一 前言 最近找了些教程,顺带着趴在官网上,看了看 Vue 的一些内容,入门的一些概念,以及基础语法,还有一些常用的操作,瞄了一眼,通篇文字+贴了部分代码 9000 多字,入门语法什么的还是很好理解的 ...

  3. axios 使用入门

    [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门   一.前言# 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重 ...

  4. 老司机带路:《axios从入门到开车 嘀嘀~~》

    前言:axios vue.axios 跨域.axios.js.axios get.axios post.axios中文文档 之前当vue更新到2.0之后,作者就宣告不再对vue-resource更新, ...

  5. vue结合axios使用入门

    Vue官方推荐的网络通信库不再是vue-resource了,推荐使用axios axios安装 npm: $ npm install axios bower: $ bower install axio ...

  6. vue入门:axios的应用及拦截封装

    一.概述 在vue2.0项目中,我们主要使用axios进行http请求. axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特征: 1.从浏览器中创建X ...

  7. vue入门(二) 让axios发送表单形式数据

    (一) 使用 axios vue-axios qs 1.qs是必不可少的插件 npm install --save axios vue-axios qs 2.安装完成后,在main.js插入以下代码 ...

  8. [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门

    一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...

  9. Vue入门(四)——Axios向SpringMVC传数据

    在实际业务需求中,经常会出现前台传表单或者对象到后台,后台Handler接受并转换成对应的POJO以供业务代码使用 此时在SpringMVC框架中就要用到@RequestBody注解,该注解用于将请求 ...

随机推荐

  1. Kendo UI使用教程:入门指南

    [Kendo UI最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support for React和 ...

  2. Python之网路编程之粘包现象

    一.什么是粘包 须知:只有TCP有粘包现象,UDP永远不会粘包 粘包不一定会发生 如果发生了:1.可能是在客户端已经粘了 2.客户端没有粘,可能是在服务端粘了 首先需要掌握一个socket收发消息的原 ...

  3. 洛谷P2482 [SDOI2010]猪国杀——题解

    猪国杀,模拟题的一颗耀眼的明珠,成长大牛.锻炼码力必写题! 模拟题没什么思维难度.只要按部就班地去做就是.模拟简单在这,难也在这.因为题面巨长,条件巨多,忽疏一点都有可能全盘皆输.故推荐考试时碰见了, ...

  4. 南京网络赛 E K Sum

    K Sum 终于过了这玩意啊啊啊==== 莫比乌斯反演,杜教筛,各种分块,积性函数怎么线性递推还很迷==,得继续研究研究 #include<bits/stdc++.h> using nam ...

  5. Redis单节点部署

    安装Redis 由于REDIS使用单线程处理请求,CPU的快慢最对REDIS的性能有较大影响,官方建议INTEL的CPU,其效率能比AMD高一倍左右. 下载Redis:wget http://down ...

  6. 一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)

    本机环境: JDK 1.7 IntelliJ IDEA 2017.2 1.新建项目 Create New Project ​ 选择Spring MVC ​ 填写项目名和项目存放位置 ​ 然后点击Fin ...

  7. 《Effective Java》读书笔记 - 7.方法

    Chapter 7 Methods Item 38: Check parameters for validity 直接举例吧: /** * ...其他的被我省略了 * @throws Arithmet ...

  8. Loading class `com.mysql.jdbc.Driver'. This is deprecated警告处理,jdbc更新处

    1.报错信息是这样的; 处理:提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当使用新的驱动com.mysql.cj.jdbc.Driver' 所以,按照提示更改jd ...

  9. vmware fusion 找不到可以连接的有效对等进程

    红框会有什么提示 vmware...,你点击允许

  10. 身份证最后一位按照ISO7064:1983.MOD11-2校验码

    居民身份证号码,根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地 ...