Axios 封装拦截

一、axios的封装

在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御cSRF等。所以我们的尤大大也是果断放弃了对其官方库vue-resource的维护,直接推荐我们使用axios库。

安装

npm install axios; // 安装axios

引入

一般我会在项目的src目录中,新建一个request文件夹,然后在里面新建一个utils.js和一个api.js文件。http.js文件用来封装我们的axios,api.js用来统一管理我们的接口。

环境的切换

我们的项目环境可能有开发环境、测试环境和生产环境。我们通过node的环境变量来匹配我们的默认的接口url前缀。

// 环境的切换
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设置默认的请求超时时间。例如超过了10s,就会告知用户当前请求超时,请刷新等。
axios.defaults.timeout = 10000;
 

post请求头的设置

post请求的时候,我们需要加上一个请求头,所以可以在这里进行一个默认的设置,即设置post的请求头为  application/x-www-form-urlencoded;charset=UTF-8

axios.defaults.headers.post[‘Content-Type‘] = ‘application/x-www-form-urlencoded;charset=UTF-8‘;

请求拦截

import Axios from "axios"

import qs from "qs"

let request  = Axios.create();

// 添加请求拦截器

request.interceptors.request.use(function (config) {

// 在发送请求之前做些什么

if(config.method === "post" && !(config.data instanceof FormData)){

config.data = qs.stringify(config.data)

}

return config;

}, function (error) {

// 对请求错误做些什么

return Promise.reject(error);

});

// 添加响应拦截器

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

// 对响应数据做点什么

return response.data;

}, function (error) {

// 对响应错误做点什么

return Promise.reject(error);

});

export default request

//这里的 qs 转换需要注意

 

装get方法和post方法

我们常用的ajax请求方法有get、post、put等方法,相信小伙伴都不会陌生。axios对应的也有很多类似的方法,不清楚的可以看下文档。但是为了简化我们的代码,我们还是要对其进行一个简单的封装。下面我们主要封装两个方法:get和post。

get方法:我们通过定义一个get函数,get函数有两个参数,第一个参数表示我们要请求的url地址,第二个参数是我们要携带的请求参数。get函数返回一个promise对象,当axios其请求成功时resolve服务器返回 值,请求失败时reject错误值。最后通过export抛出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)
    })
});}
 


原文地址:https://www.cnblogs.com/oceanleader/p/12116171.html

时间: 2024-11-14 19:38:58

Axios 封装拦截的相关文章

使用策略模式封装拦截器

通过if-else 来实现拦截器的封装 axios.interceptors.response.use((res) => { let {message, statusCode} = res.data.data // 退出登录状态码 let logoutCodes = new Set([435001, 435011, 436050]) if (statusCode === 1000) { // 更新全局token let {pragma} = res.headers if (pragma) win

vue axios 封装

import Cookies from 'js-cookies'; import axios from 'axios'; /** * 封装,拦截 */ axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers['token'] = 'token'; axios.defaults.headers.post['Content-Type'] = 'application/json'; const Axios =

axios封装

// 服务层 , import默认会找该目录下index.js的文件,这个可能有小伙伴不知道 // 可以去了解npm的引入和es6引入的理论概念 import axiosPlugin from "./server"; Vue.use(axiosPlugin); 对axios的封装(AXIOS:index.js) import axios from "axios"; import qs from "qs"; import { Message } f

axios 封装

常见用法引入 axios 直接使用 // get axios.get('/user', { params: { ID: 12345 } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); //postaxios.post('/user' , { params: { firstName: 'Fred', lastName: 'Flints

vue项目实践-添加axios封装api请求

安装 axios npm install axios --save 创建实例 (utils/fetch.js) axios 默认提交格式为:application/json 可使用 qs 模块(需要安装)转换后提交格式为 application/x-www-form-urlencoded 通过设置 transformRequest 属性 data => qs.stringify(data) 可以正常表单形式提交 import axios from 'axios' const instance =

vue Axios 封装与配置项

import axios from "axios"; import qs from "qs"; import { Message } from "element-ui"; import router from "../router"; const Axios = axios.create({ baseURL: "/", // 因为我本地做了反向代理 timeout: 10000, responseType:

vue中的axios封装

import axios from 'axios'; import { Message } from 'element-ui'; axios.defaults.timeout = 5000;axios.defaults.headers = {'Content-Type': 'application/x-www-form-urlencoded'} axios.defaults.withCredentials = true //http request 拦截器 axios.interceptors.

vue-cli axios封装(element-ui)

1.http.js /** * * http配置 */ import axios from 'axios'import { Loading, Message } from 'element-ui' // axios 配置axios.defaults.timeout = 5000; // http request 拦截器axios.interceptors.request.use( config => {// if (store.state.token) {// config.headers.Au

axios封装(一)基础配置

axios 是目前流行的Promise网络请求库,在浏览器端他通过 xhr方式创建ajax请求.在node环境下,通过 http 库创建网络请求. axios 提供了丰富的配置,这里讲一讲我在工作中通常用到的基本配置方法. 因为我在工作中用 vue 进行开发,所以以下代码默认的环境是 vue-cli. 创建一个 axios 实例 为什么要创建一个 axios 实例,而不是在 axios 对象上进行配置呢?是因为我们会应对复杂的使用场景,多个实例便于管理. const isDev = proces