axios入门使用
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入门使用的更多相关文章
- Day06_商品分类(vuetify-nginx-cors)与品牌查询
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- 一个后端开发的 Vue 笔记【入门级】
一 前言 最近找了些教程,顺带着趴在官网上,看了看 Vue 的一些内容,入门的一些概念,以及基础语法,还有一些常用的操作,瞄了一眼,通篇文字+贴了部分代码 9000 多字,入门语法什么的还是很好理解的 ...
- axios 使用入门
[Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门 一.前言# 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重 ...
- 老司机带路:《axios从入门到开车 嘀嘀~~》
前言:axios vue.axios 跨域.axios.js.axios get.axios post.axios中文文档 之前当vue更新到2.0之后,作者就宣告不再对vue-resource更新, ...
- vue结合axios使用入门
Vue官方推荐的网络通信库不再是vue-resource了,推荐使用axios axios安装 npm: $ npm install axios bower: $ bower install axio ...
- vue入门:axios的应用及拦截封装
一.概述 在vue2.0项目中,我们主要使用axios进行http请求. axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特征: 1.从浏览器中创建X ...
- vue入门(二) 让axios发送表单形式数据
(一) 使用 axios vue-axios qs 1.qs是必不可少的插件 npm install --save axios vue-axios qs 2.安装完成后,在main.js插入以下代码 ...
- [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门
一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...
- Vue入门(四)——Axios向SpringMVC传数据
在实际业务需求中,经常会出现前台传表单或者对象到后台,后台Handler接受并转换成对应的POJO以供业务代码使用 此时在SpringMVC框架中就要用到@RequestBody注解,该注解用于将请求 ...
随机推荐
- CodeForces-585B(BFS)
链接: https://vjudge.net/problem/CodeForces-585B 题意: The mobile application store has a new game calle ...
- npm 安装时 --save --dev 和 --save 区别
一.模式 运行webpack命令时,一定要指定模式. webpack --mode developmentwebpack --mode production二.--save -dev --save:将 ...
- linux-网络管理-6
Hub 集线器 物理层设备 多端口中继器,不记忆MAC地址 以太网桥 OSI第二层数据链路层 扩展了网络带宽 分割了网络冲突域,使网络冲突被限制在最小的范围内 交换机作为更加智能的交换设备,能够提供更 ...
- C# SqlSugarClient分析一点
public class UserManager : DbContext<User>{} UserManager userdb = new UserManager(); //创建对象 va ...
- luoguP1514 引水入城 x
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- docker-compose进行部署容器的时候,报错权限不足
刚刚用docker-compose部署elk的时候,没有起来,查看日志的时候,发现在数据卷挂载的时候,报错权限不足. 由于日志不在了,这里就直接贴出解决办法. 问题原因及解决办法 原因是CentOS7 ...
- 目标检测:AlexNet
AlexNet是2012年ImageNet竞赛冠军. 它是在CNN的基础上设计的,CNN(卷积神经网络)可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的 ...
- SQL简介及分类
SQL (Structured Query Language) 结构化查询语言,定义了所有操作关系型数据库的规则,只要是关系型数据库都需要用SQL语句: 语法: 一行可以有多个SQL语句,以分号结尾: ...
- logstash之OutPut插件
output插件是经过了input,然后过滤结构化数据之后,接下来我们需要借助output传到我们想传到的地方.output相当于一个输出管道. 2.3.1: 将采集数据标准输出到控制台 配置示例: ...
- CDH安装时,部分节点不受管控
解决方案: /opt/cm-5.12.0/etc/init.d/cloudera-scm-agent stop cd /opt/cm-5.12.0/lib/cloudera-scm-agent/ rm ...