五、封装axios

2019-12-12  本文已影响0人  风之伤_3eed

新建src/config/axios.tsx文件
参考网站 axios

一、安装axios

npm i axios

二、创建axios请求

export const server = axios.create({
  timeout: 6000,
  headers: {
    "Content-Type": "application/json;charset=UTF-8"
  }
});

三、添加请求拦截(当登录成功后接口需要token才有权限请求,可以在请求前统一添加token)

server.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么(如果有token则所有请求携带token,该token存在localStorage中)
    const user = localStorage.getItem("user");
    let token = null;
    if (user) {
      const users = JSON.parse(user);
      token = users.token;
    }
    config.headers.token = token;
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

四、添加响应拦截

server.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    return response;
  },
  function(error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

五、导出请求

function open(message: any) {
  Notification['error']({
    title: message,
    description: <div style={{width: 320}}>{message}</div>
  });
}

export const error = (response: any) => {
  // 请求失败提示错误信息
  open(response.data.message)
  throw new Error(response.data);
};

export const wrapServer = (opt: any) => {
  return server
    .request({
      method: "post",
      ...opt
    })
    .then(response => {
      const data = response.data;
      if (data.code === 200 || data.code === "200") {
        return data;
      } else {
        return Promise.reject(response);
      }
    })
    .catch(info => {
      return error(info);
    });
};

页面整体代码

import React from 'react';
import axios from "axios";
import { Notification } from 'rsuite';

function open(message: any) {
  Notification['error']({
    title: message,
    description: <div style={{width: 320}}>{message}</div>
  });
}

export const error = (response: any) => {
  open(response.data.message)
  throw new Error(response.data);
};

export const server = axios.create({
  timeout: 6000,
  headers: {
    "Content-Type": "application/json;charset=UTF-8"
  }
});

// 添加请求拦截器
server.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么(如果有token则所有请求携带token,该token存在localStorage中)
    const user = localStorage.getItem("user");
    let token = null;
    if (user) {
      const users = JSON.parse(user);
      token = users.token;
    }
    config.headers.token = token;
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
server.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    return response;
  },
  function(error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

export const wrapServer = (opt: any) => {
  return server
    .request({
      method: "post",
      ...opt
    })
    .then(response => {
      const data = response.data;
      if (data.code === 200 || data.code === "200") {
        return data;
      } else {
        return Promise.reject(response);
      }
    })
    .catch(info => {
      return error(info);
    });
};
上一篇下一篇

猜你喜欢

热点阅读