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: ‘Flintstone‘
  }
})
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

创建一个 js 文件,封装代码如下:

‘use strict‘

import axios from ‘axios‘
import qs from ‘qs‘

// 拦截器
axios.interceptors.request.use(config => {
  // loading
  return config
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  return response
}, error => {
  return Promise.resolve(error.response)
})

function checkStatus (response) {
  // loading
  // 如果http状态码正常,则直接返回数据
  if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
    return response.data
    // 如果不需要除了data之外的数据,可以直接 return response.data
  }
  // 异常状态下,把错误信息返回去
  return {
    status: -404,
    msg: ‘网络异常‘
  }
}

function checkCode (res) {
    // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
    if (res.status === -404) {
        console.log(res.msg)
    }
    if (res.data && (!res.data.success)) {
        console.log(res.data.error_msg)
    }
    return res
}

export default {
  post (url, data) {
    return axios({
      method: ‘post‘,
      baseURL: ‘http://ws.sandbox.mammasay.com‘,
      url,
      data: qs.stringify(data),
      timeout: 10000,
      headers: {
        ‘X-Requested-With‘: ‘XMLHttpRequest‘,
        ‘Content-Type‘: ‘application/x-www-form-urlencoded; charset=UTF-8‘
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  },
  get (url, params) {
    return axios({
      method: ‘get‘,
      baseURL: ‘http://ws.sandbox.mammasay.com‘,
      url,
      params, // get 请求时带的参数
      timeout: 10000,
      headers: {
        ‘X-Requested-With‘: ‘XMLHttpRequest‘
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  }
}

组件里边调用,引入该 JS 即可。

原文地址:https://www.cnblogs.com/hai-cheng/p/8809505.html

时间: 2024-11-16 09:33:28

axios 封装的相关文章

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

解决react项目中跨域和axios封装使用

最新几天学了一下react,发现了几个问题,估计新入坑的同学们也会遇到,下面我先列出来几点 1.请求跨域问题 2.如何发起请求 3.axios的简单封装 全局安装create-react-app脚手架,帮助我们新建react项目 npm install -g create-react-app 然后创建react项目 create-react-app xxx项目名 然后安装依赖,并且运行react项目 安装 npm install 运行 npm start 首先我们解决跨域的问题 打开项目生成的p

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 封装 全局使用

[不墨迹直接上码系列] 代码分三步: 1. 创建一个api.js,封装axios 2. 在main.js引入,并加到vue原型上 3. 全局使用 1. 创建+封装 //api.js import axios from "axios"; var apiUrl = ''; function yuanAjax(url,data,successCallback,errorCallback) { axios.post(apiUrl + url,data).then(function (res)

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.

Axios 封装拦截

一.axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中.他有很多优秀的特性,例如拦截请求和响应.取消请求.转换json.客户端防御cSRF等.所以我们的尤大大也是果断放弃了对其官方库vue-resource的维护,直接推荐我们使用axios库. 安装 npm install axios; // 安装axios 引入 一般我会在项目的src目录中,新建一个request文件夹,然后在里面新建