简单封装axios api
可以在代码逻辑中写axios请求,处理请求结果,但是随着项目越来越大,代码会很繁琐,不容易维护,所以,可以把一些在所有请求中都要处理的逻辑抽取出来,封装成api方法。比如每次请求中都要判断是否有权限,每次请求都要携带token。
- 建一个request.js文件,对请求的服务的拦截
import axios from 'axios' // create an axios instance,根据需要写入配置信息
const service = axios.create({
// baseURL: process.env.BASE_API, // api的base_url
// timeout: 5000,
//headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' },//method: 'get', //一般需要用post
// request timeout
}) // request interceptor 请求之前的拦截器
service.interceptors.request.use(config => {
// Do something before request is sent
return config
}, error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}) // respone interceptor 请求之后异常状态拦截
service.interceptors.response.use(
response => {
const res = response.data;
if (res.statusCode === || res.statusCode === || res.statusCode === || res.statusCode === || res.statusCode === ) {
return Promise.reject('error');
} else {
return response.data;
}
},
error => {
console.log('err' + error)// for debug
return Promise.reject(error)
}
) export default service - 添加auth.js文件,本地缓存实现对用户信息缓存的读写和移除,代码:
//与用户验证相关的方法 export function getToken() {
//从localstorage获取token
return localStorage.getItem('token');
} export function setToken(token) {
//本地缓存存储token
localStorage.setItem('token', token);
} export function removeToken() {
//本地缓存移除token
localStorage.removeItem('token');
} export function getUserId() {
//从本地缓存中获取userID
return localStorage.getItem("userid");
} export function setUserId(userid) {
//本地缓存存储userId
localStorage.setItem('userid', userid);
} export function removeUserId() {
//本地缓存移除userId
localStorage.removeItem('userid');
} export function getProjectId() {
//从本地缓存中获取projectid
return localStorage.getItem("projectid");
} export function setProjectId(projectid) {
//本地缓存存储projectid
localStorage.setItem('projectid', projectid);
} export function removeProjectId() {
//本地缓存移除projectid
localStorage.removeItem('projectid');
} - 在store.js中,添加如下对auth.js的使用,和状态管理:
import Vue from 'vue'
import Vuex from 'vuex'
import { getToken, setToken, removeToken, getUserId, setUserId, getProjectId, setProjectId, removeUserId, removeProjectId } from '../Utils/auth.js' Vue.use(Vuex); /*访问状态对象--存放变量*/
const state = {
token: getToken(),
userId: getUserId(),
projectId: getProjectId()
}
/*访问触发对象--存放事件*/
const mutations = {
SET_TOKEN: (state, token) => {
setToken(token);
//state.token = token;
//localStorage.setItem('token', token);
},
SET_USER_ID: (state, m) => {
setUserId(m);
},
SET_PRO_ID: (state, m) => {
state.projectId = m;
setProjectId(m);
}, //用户注销后删除所有本地数据
LOGOUT: (state) => {
removeToken();
removeUserId();
removeProjectId();
}
}
export default new Vuex.Store({
state,
mutations
}) - 添加webapi.js:使用request.j实现对请求的拦截,封装测试前端api,传递参数,发送请求:
import request from './request' //引入request.js实现对请求前后的拦截功能
export function getTest(apiRoute) {
return request({
url: apiRoute,
method: 'get',
params: { "ai": "ai" }
})
} - webApi在组件中的使用
//按需引入封装好的webapi的方法import { getTest } from "../../Utils/webapi.js";
export default{
//测试前端api的使用,在创建的时候发送请求,获取项目信息
created: function() {
var _this = this;
//test
getTest("/project/test").then(response => {
_this.testapi = response.data;
});
},
}
该例子是针对项目的简单封装和使用例子,具体的axios的配置和相关知识可以看下一遍文章介绍
简单封装axios api的更多相关文章
- Vue简单封装axios—解决post请求后端接收不到参数问题
1.在src/下新建api文件夹,api/下新建index.js和public.js 在public.js中: import axios from 'axios'; import qs from 'q ...
- vue中Axios的封装和API接口的管理
前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...
- axios简单封装
写在最前面 新手前端刚刚接触vue,感觉真的好用.项目中需要使用axios,然后学习了一下.借鉴网上一些大佬的经验,现在分享一下axios的简单封装,如果有什么错误的地方,请大家指出. axios安装 ...
- Vue中axios的封装和api接口的统一管理
更新的是我csdn上的文章,需要的话可以看下,互相学习点击去我的csdn vue中axios的封装 在vue项目和后端交互获取数据时,通常使用axios库,官方文档:https://www.npmjs ...
- 用XHR简单封装一个axios
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [web 前端] 封装简单的axios库
转载自https://blog.csdn.net/qq_35844177/article/details/78809499 1.新建http.js文件,封装axios get post 方法 impo ...
- Vue.js(18)之 axios简单封装
基于vue-cli2.x封装axios src目录 axios.js import axios from 'axios' import { Indicator, Toast } from 'mint- ...
- Vue笔记:封装 axios 为插件使用
前言 自从Vue2.0推荐大家使用 axios 开始,axios 被越来越多的人所了解.使用axios发起一个请求对大家来说是比较简单的事情,但是axios没有进行封装复用,项目越来越大,引起的代码冗 ...
- vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title
1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...
随机推荐
- sgi stl内存池实现------源码加翻译
class __default_alloc_template { enum { unit = 8 };//分配单位 后面直接用8代替 enum { max_bytes = 128 };//最大分配字节 ...
- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
问题: Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) 解决: cmake -DPYTHON_INC ...
- Linux的思维导图
- “全栈2019”Java第九十九章:局部内部类与继承详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 【timeisprecious】【JavaScript 】JavaScript String 对象
JavaScript>String 对象 1 .From Runnob JavaScript String 对象(概览) JavaScript String 对象(教程)
- MySQL之LIMIT用法
http://blog.163.com/niuxiangshan@126/blog/static/17059659520101081058299/ 看的人家的 mysql支持limitselect * ...
- Creating a custom analyzer in ElasticSearch Nest client
Creating a custom analyzer in ElasticSearch Nest client Question: Im very very new to elasticsearch ...
- 通过UIColor转换为UIImage
+ (UIImage *)createImageWithColor:(UIColor *)color { CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); ...
- 技巧方法 - CentOS6将Python2.6.6升级到Python2.7.6
1.首先使用“python -V”命令查看python版本,我们测试主机显示的是2.6.6版,于是下面就着手将python2.6.6升级到Python2.7.6.python -V #查看python ...
- SpringDataRedis java.net.UnknownHostException: 127.0.0.1 错误
找了半天发现原来配置文件中多了一个空格; idea中properties文件的127.0.0.1后面出现了一个空格,编辑器将其变深黄色了