总结:vue中Axios的封装-API接口的管理

vue中axios的封装

在vue项目和后端交互获取数据时,通常使用axios库,官方文档

浅谈在项目中axios的简单二次封装

安装

npm install axios; //安装axios

//cnpm install axios;//或者使用镜像下载.

#### 引入组件

**通常情况下,在项目src目录下创建request文件夹,然后创建http.js和api.js文件。**

- http.js用来二次封装axios;

-  api.js用来统一管理后端接口;

**在http.js文件中**

- 引入axios;

- 引入qs,用于序列化post类型的数据。

- 引入ui提示框,根据自己u进行修改;**[推荐elementui文档]**



 环境切换

在http.js的文件中的axios.defaults.baseURL可以设置axios的默认请求地址。配合不同的运行指令进行开发不同环境的数据。

另附配置[vue不同环境配置不同打包命令]

// 环境的切换

if (process.env.NODE_ENV == 'development') {   

    axios.defaults.baseURL = 'https://www.baidu.com';}

else if (process.env.NODE_ENV == 'debug') {   

  axios.defaults.baseURL = 'https://www.ceshi.com';

}

else if (process.env.NODE_ENV == 'production') {   

      axios.defaults.baseURL = 'https://www.production.com';

}

请求默认值的设置

**通过axios.defaults.timeout设置默认的请求超时时间。**

//设置默认的请求超时时间

axios.defaults.timeout = 10000;

**设置默认请求头和token**

//设置post的请求头

axios.defaults.headers.post['Content-Type'] = 'application/json';

//设置默认token 一般有权限不在这里设置

//axios.defaults.headers.Authorization=token;

请求拦截

**token拦截**

一般情况下,发送请求必须带有token进行验证。做权限的话这里需要注意。

axios.interceptors.request.use(

config => {

    let token = localStorage.getItem("header");

    if (token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token

      config.headers.token = `${token}`;

    }

    return config;

  },

  err => {

    this.$router.push("/login")

    return Promise.reject(err);

  });


**响应拦截**

*这里需要根据后端协商,根据后端返回状态码进行处理*


axios.interceptors.response.use(function (response) {

  if (response.status >= 400) {

    localStorage.clear();// 删除已经失效或过期的token(不删除也可以,因为登录后覆盖)

    router.replace({

      path: '/login', // 到登录页重新获取token

      query: {

      //回到当前页面

        redirect: router.currentRoute.fullPath

    }

    })

  }

  return response

}, function (error) {

  if (error.response) {

    if(error.response.status===403){

    Message({

        showClose: true,

        message: '登录过期',

        type: 'error'

    });

        localStorage.clear();

        Cookies.set("user","",-10);

        router.replace({

          path: '/login' // 到登录页重新获取token

        })

    }else if(error.response.status===405){

      Message({

        showClose: true,

        message: '权限不足,请联系管理员',

        type: 'warning'

    });

    router.replace({

    path: '/error',

    })

    }else if(error.response.status===500){

      Message({

        showClose: true,

        message: '服务器异常',

        type: 'error'

  });

    }

    }

  return Promise.reject(error)

})

封装get和post方法

*axios封装的方法有很多,比如get,post,delete,put等方法。这里简单介绍get和post的封装。*

**post**

/**

* post方法,对应post请求

* @param {String} url [请求的url地址]

* @param {Object} params [请求时携带的参数]

*/

export function post(url, params) {

    return new Promise((resolve, reject) => {

        axios.post(url, params)

            .then(res => {

                resolve(res.data);

            })

            .catch(err => {

                reject(err.data)

            })

    });

}

**get**

/**

* get方法,对应get请求

* @param {String} url [请求的url地址]

* @param {Object} params [请求时携带的参数]

*/

export function get(url, params) {

    return new Promise((resolve, reject) => {

        axios.get(url, {

            params: params

        }).then(res => {

            resolve(res.data);

        }).catch(err => {

            reject(err.data)

        })

    });

}

vue中api的封装

*首先在api.js中引入在http.js中封装的get和post两种方法。*

import { get, post } from './http'

*不同参数的封装接口方法*

export const Login = p => get('/api/admin/login', p);

export const Registry = p => post('/api/admin/registry', p);

//路径参数封装

//export const  Api= p => post('/api/'+ p);

//多参数封装

export const  Api=( p,q )=> post('/api/'+ p+“/"+q);

*页面中使用方法*

import { Login,Registry } from "@/request/api"

export default {

name:"app",

data(){

return{

message:{

uname:"",

upwd:""

}

}

},

methods:{

login(){

Login(this.message).then(res=>{

....请求成功的处理

})

}

}

}

例外附上:

1.[gulp安装与使用]

2.[搭建基于webpack的vue环境]

3.[浅谈Vue项目优化心得]

4.[总结:搭建Vue项目心得]

5. [总结:vue中Axios的封装-API接口的管理]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335