xios封装
封装的意义
1.提高代码可读性
2.提高代码可维护性
3.减少代码书写
封装
- import axios from 'axios'
- axios.defaults.baseURL = 'http://127.0.0.1:8000'
- // 全局设置网络超时
- axios.defaults.timeout = 10000;
- //设置请求头信息
- axios.defaults.headers.post['Content-Type'] = 'application/json';
- axios.defaults.headers.put['Content-Type'] = 'application/json';
- axios.interceptors.request.use(
- config => {
- // 每次发送请求之前判断是否存在token,如果存在,统一在http请求的header都加上token,不用每次请求都手动添加
- const token = localStorage.getItem('token')
- // console.log(token)
- if(token){
- config.headers.Authorization = 'JWT' + token
- }
- return config;
- },
- error => {
- return Promise.error(error);
- })
- axios.interceptors.response.use(
- //请求成功
- // res => res.status === 200 ? Promise.resolve(res) :
- Promise.reject(res),
- res => {
- if(res){
- //加上201是因为modelviewset的post请求成功的状态码是201
- if(res.status === 200 || res.status === 201){
- return Promise.resolve(res)
- }
- }
- },
- //请求失败
- error => {
- if(error.response){
- // 判断⼀下返回结果的status == 401? ==401跳转登录⻚⾯。 !=401passs
- // console.log(error.response)
- if (error.response.status === 401){
- // 跳转不可以使⽤this.$router.push⽅法、
- // this.$router.push({path:'/login'})
- window.location.href = 'http://127.0.0.1:8888/'
- }else{
- // errorHandle(response.status, response.data.message);
- return Promise.reject(error.response);
- }
- // 请求已发出但是不在2xx的范围
- }else {
- // 处理断⽹的情况
- // eg:请求超时或断⽹时,更新state的network状态
- // network状态在app.vue中控制着⼀个全局的断⽹提示组件的显示隐藏
- // 关于断⽹组件中的刷新重新获取数据,会在断⽹组件中说明
- // store.commit('changeNetwork', false);
- return Promise.reject(error.response);
- }
- }
- )
- //封装axios
- //封装get请求
- export function axios_get(url,params){
- return new Promise(
- (resolve,reject)=>{
- axios.get(url,{params:params}).then(res=>{
- // console.log("封装信息的的res", res)
- resolve(res.data)
- }).catch(err=>{
- reject(err.data)
- })
- }
- )
- }
- //封装post请求
- export function axios_post(url,data){
- return new Promise(
- (resolve,reject)=>{
- // console.log(data)
- axios.post(url,JSON.stringify(data)).then(res=>{
- // console.log("封装信息的的res", res)
- resolve(res.data)
- }).catch(err=>{
- reject(err.data)
- })
- }
- )
- }
- //封装put请求
- export function axios_put(url,data){
- return new Promise(
- (resolve,reject)=>{
- // console.log(data)
- axios.put(url,JSON.stringify(data)).then(res=>{
- // console.log("封装信息的的res", res)
- resolve(res.data)
- }).catch(err=>{
- reject(err.data)
- })
- }
- )
- }
- //封装delete请求
- export function axios_delete(url,data){
- return new Promise(
- (resolve,reject)=>{
- // console.log(data)
- axios.delete(url,{params:data}).then(res=>{
- // console.log("封装信息的的res", res)
- resolve(res.data)
- }).catch(err=>{
- reject(err.data)
- })
- }
- )
- }
- //⼀定要导出函数
- export default axios;
使用
- //将我们http.js中封装好的 get,post.put,delete 导过来
- import {axios_get,axios_delete,axios_post,axios_put} from './http.js'
- export const user_add = p => axios_post("/app02/user/", p) // 获取七⽜云token
- <script>
- // 导入axios函数
- import {user_add} from '../api/api'
- export default {
- data(){
- return{
- username:'',
- age:'',
- home:'',
- hight:'',
- roles:'',
- classrooms:'',
- }
- },
- methods:{
- add(username){
- let data={
- "username":this.username,
- "age":this.age,
- "home":this.home,
- "hight":this.hight,
- "roles":[this.roles],
- "classrooms":this.classrooms
- }
- //直接使用导入的axios函数
- user_add(data).then(res=>{
- console.log(res)
- if(res.code==200){
- alert('添加成功')
- sessionStorage.setItem("username",username)
- this.$router.push({path:'/userdel'})
- }else {
- alert('添加失败')
- }
- }).catch(error=>{
- console.log(error)
- })
- }
- },
- }
- </script>
xios封装的更多相关文章
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- CSharpGL(7)对VAO和VBO的封装
CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...
随机推荐
- APIO2008免费道路
题目大意 给定一张n个点m条边的图,图上有两种边,求保证有k条第一种边的情况下的最小生成树 传送门 题解 考虑最小生成树kruskal算法 先找到不含限制的最小生成树,然后就可以知道哪些第一种边是必选 ...
- Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)
Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...
- AWS SDK 使用说明
AWS 的Python SDK包名为 boto3, 可以使用命令pip install boto3安装使用 BOTO3中的基本概念 boto3提供了两个级别的接口来访问AWS服务:High Level ...
- expect ':' at 0, actual = (JSON转化异常解决)
这个报错我的问题主要是前端得到的JSON格式不是标准的JSON串,所以会报这个错, 解决办法 需要使用JSON.toJSONString()转换为标准的字符串
- php之cms后台文章管理及显示
public function index(){ C('TOKEN_ON',false);//关闭表单令牌 读取配置 //查询指定id的栏目信息 $id=I('get.id');//类别ID $top ...
- linux之NTP服务
1. NTP服务(网络时间协议) Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒) ...
- 科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同
摘要:鸿蒙和LiteOS的内核都是一样的名字,可它们究竟有什么不同呢?一起来对比一下文件吧! HarmonyOS系统 HarmonyOS是一款"面向未来".面向全场景(移动办公.运 ...
- parted会启动你的ceph osd,意外不?
前言 如果看到标题,你是不是第一眼觉得写错了,这个怎么可能,完全就是两个不相关的东西,最开始我也是这么想的,直到我发现真的是这样的时候,也是很意外,还是弄清楚下比较好,不然在某个操作下,也许就会出现意 ...
- 单独编译一个ext4内核模块
当我们需要使用一个内核模块的时候,在当前使用版本内核编译的时候又没有加进去,在不改变内核版本的时候,再编译整个内核,可能会覆盖原来的内核,导致系统无法启动 现在我们能够单独选择需要的模块,然后加载进内 ...
- Jmeter 处理接口乱码
第一步:添加 BeanShell Listener 第二步: 设置值 : prev.setDataEncoding("UTF-8") 第三步: 重新跑脚本,看接口返回值