axios封装和请求响应拦截

2020-07-01  本文已影响0人  帝王弦

安装axios

cnpm i axios -S

项目根目录分别新建.env.development文件和.env.production文件

//.env.development文件

#开发环境
NODE_ENV  = 'development'

# api地址
VUE_APP_BASE_API = 'http://localhost:3000'

//.env.production文件

#生产环境
NODE_ENV  = 'production'

# api地址
VUE_APP_BASE_API = 'http://线上接口地址'

src文件夹下新建utils文件夹,建立request.js文件

import axios from 'axios';

//根据环境 给指定的接口地址
const request = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 3000
})

//状态码返回
const codeMessage = {
    201: '新建或修改数据成功。',
    202: '一个请求已经进入后台排队(异步任务)。',
    204: '删除数据成功。',
    400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
    401: '用户没有权限(令牌、用户名、密码错误)。',
    403: '用户得到授权,但是访问是被禁止的。',
    404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
    406: '请求的格式不可得。',
    410: '请求的资源被永久删除,且不会再得到的。',
    422: '当创建一个对象时,发生一个验证错误。',
    500: '服务器发生错误,请检查服务器。',
    502: '网关错误。',
    503: '服务不可用,服务器暂时过载或维护。',
    504: '网关超时。',
};

//请求拦截
request.interceptors.request.use(
    config => {
        return config
    },
    error => {
        console.log('请求拦截错误', error) // for debug
        return Promise.reject(error)
    }
)

//响应拦截
request.interceptors.response.use(
    response => {
        console.log('响应返回值', response.data);
        return response.data
    },
    error => {
        const { response } = error
        return Promise.reject({ "status": response.status, "message": codeMessage[response.status] })
    }
)

export default request

封装请求接口(src文件夹下新建api文件夹,新建user.js文件)

import request from '@/utils/request';

export const getUser = () =>{
  return request({
    url:'get_user_info',
    method:'get'
  })
}

使用

import { getUser} = '@/api/user'

getUser()
.then(res=>{
  console.log(res);
})
.catch(err=>{
  console.log(err);
})

上一篇下一篇

猜你喜欢

热点阅读