如何正确使用带有 axios + react 的拦截器

Posted

技术标签:

【中文标题】如何正确使用带有 axios + react 的拦截器【英文标题】:How correctly to use interceptorce with axios + react 【发布时间】:2021-06-16 11:18:43 【问题描述】:

这是我在 react 应用中的 axios 实例。我想要做的是从服务器捕获错误并基于错误将其静音。例如,如果存在具有此名称的用户,我想消除错误并只返回警报消息。但是拦截器没有触发:

import axios from "axios";

const instance = axios.create(
    baseURL: "http://localhost:8000",
    withCredentials: true,
    timeout: 1000
)

instance.interceptors.request.use(
    request => request,
    error => 
        console.log(error)
        console.log(error.response)
        console.log(error.response.message)
        return  data:   status: 'fail'  ;
    
)

export default instance

现在我只想要 console.log 它,但它仍然会破坏整个逻辑并引发错误((

【问题讨论】:

它会抛出什么错误?您是否尝试像文档显示的那样在错误回调中返回 Promise? return Promise.reject(error); 【参考方案1】:

请求拦截器(axios.interceptors.request.use)一般用于在header中配置参数,比如

instance.interceptors.request.use(config => 
  console.log('request interceptor in here')
  config.headers = 
    ...config.headers,
    'x-requested-with': 'XMLHttpRequest'
    // other parameters...
  
  return config
)

和响应拦截器(axios.interceptors.response.use)拦截返回的结果或错误,比如

instance.interceptors.response.use(response => 
  console.log('success', response)
, error => 
  console.log('fail', error)
)

【讨论】:

【参考方案2】:

您应该使用响应 interceptor (axios.interceptors.response.use) 来拦截响应并处理错误。

instance.interceptors.response.use(
  (response) => response,
  (error) => 
    console.log(error)
    // ...
  
)

【讨论】:

以上是关于如何正确使用带有 axios + react 的拦截器的主要内容,如果未能解决你的问题,请参考以下文章

仅当启用 react-native-debugger 时,带有标头的 axios 请求才有效

React - 带有文件和字符串的 Axios POST 表单数据

如何使用带有 (axios/classhooks) 的 map 函数从 API 中读取

前端如何尽量正确地处理ajax的异常?

如何在反应项目和 Firebase 中使用带有 axios 的删除请求?

在 React-Native 应用程序中使用带有授权标头的 Axios GET