这个axios封装是哪里写的不对吗?

1.登陆时我故意输错密码 后台返回400的时候为什么没有走响应拦截的error?而是走的response
2.我在config的index.js里面配置了跨越了 我这样配置生产环境和开发环境对不对?
还有其它写的不对的地方吗
谢谢

import axios from 'axios'
import router from '../router/index.js'
import qs from 'qs'
import { Message } from "element-ui"

// 超时默认值
axios.defaults.timeout = 5000
axios.defaults.responseType = 'json'
var env = process.env;
if(env.NODE_ENV == 'production'){
  axios.defaults.baseURL= env.HOST
}else{
  axios.defaults.baseURL= ''  //这里配置对不对?
}
axios.interceptors.request.use(
  config => {
    if (config.method === 'post') {
      let data = qs.parse(config.data)
      config.data = qs.stringify({
        ...data
      })
      return config;
    }
  },
  err => {
    return Promise.reject(err)
  }
)

axios.interceptors.response.use(
  response => {
    console.log(response.data.code)
    if(response.data.code!=200){
      Message.error({message: response.data.message})
    }
    return response
  },
  error => {
    console.log(1)//为什么不走这里
    if (error) {
      switch (error.response.status) {
        case 401:
          router.push({path: '/login'})
      }
    } else {
    }
    return error
  }
)
/**
 * post 方法封装
 * @param url
 * @param data
 * @returns {Promise}
 */

export function post (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.post(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}

/**
 * get 方法封装
 * @param url
 * @param data
 * @returns {Promise}
 */
export function get (url, data = {}) {
  return axios.get(url, {params: data})
    .then((response) => {
      return response.data
    }).catch()
}
/**
 * patch 方法封装
 * @param url
 * @param data
 * @returns {Promise}
 */

export function patch (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.patch(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}

/**
 * put 方法封装
 * @param url
 * @param data
 * @returns {Promise}
 */

export function put (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.put(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}

/**
 * delete 方法封装
 * @param url
 * @param data
 * @returns {Promise}
 */

export function dele (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.delete(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}

阅读 1.5k
2 个回答

1.输错密码后,请求返回成功是200,image.png
400是后端自定义的code,所以会走response
2.axios.defaults.baseURL= '' 这样你请求发起的requesturl是localhost。这里需要填写对应的后端接口

400在 axios 里面不是 Error

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题