reactjs - axios错误处理err.response对象

标签 reactjs typescript redux axios

我有一个 React/Redux 操作创建器,它在创建新用户帐户时发出发布请求。

当我测试服务器验证时,我期望定义 catch 中的 err.response 对象并返回验证错误消息。但是,err.response 和 err.request 对象未定义,当用户应该看到验证错误时,我收到通用的“发生内部错误” .

我已遵循他们在https://github.com/axios/axios#handling-errors推荐的设置,但是我没有找到运气。有什么想法吗?

import { REGISTER_SUCCESS, REGISTER_FAILED, RegisterReq, TokenRes } from "./types";
import { returnErrors } from "../errors/actions";
import { Config } from "../../utils/tokenConfig";
import axios, { AxiosResponse, AxiosError } from "axios";

export const registerUser = (user: RegisterReq) => (dispatch:Function):void => {
    const config: Config = {
        headers: {
            "Content-Type": "application/json"
        },
        withCredentials: false
    };

    axios.post<TokenRes>("/v1/users", user, config)
        .then((res: AxiosResponse<TokenRes>):void => dispatch({
            type: REGISTER_SUCCESS,
            payload: res.data
        }))
        .catch((err: AxiosError):void => {
            if(err.response) dispatch(returnErrors(err.response.data, err.response.status, REGISTER_FAILED));
            
            else if(err.request) dispatch(returnErrors(err.request.data, err.request.status, REGISTER_FAILED));
         
            dispatch(returnErrors("An internal error occurred", 500, REGISTER_FAILED));
        });
};

最佳答案

所以看来 err 属性实际上已定义,但我的组件正在渲染多次,这使得它返回一般错误。这使得 AxiosError 属性看起来像是未定义的。 Redux Devtools State Changes

在 catch 回调中,只需将 else 添加到最终调度

.catch((err: AxiosError):void => {
    if(err.response) dispatch(returnErrors(err.response.data, err.response.status, REGISTER_FAILED));
            
    else if(err.request) dispatch(returnErrors(err.request.data, err.request.status, REGISTER_FAILED));
         
    else dispatch(returnErrors("An internal error occurred", 500, REGISTER_FAILED));
});

关于reactjs - axios错误处理err.response对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62525991/

相关文章:

javascript - webpack/babel/react - 意外的 token 错误

typescript - QueryBuilder 的 TypeORM WHERE 子句中的参数有什么问题?

javascript - 列表项中的 ReactJS onClick

javascript - Reactjs - 类型错误 : Failed to execute 'fetch' on 'Window' : Failed to parse URL from ***. **.*.***:2000

typescript - 了解如何调用 REST Api 并在 Angular 2 中显示来自响应的数据

javascript - 使用 ARc/React/Redux 将数据从组件传递到 action 和 saga

javascript - 即使在获取数据后,React 组件的 render 方法也会调用两次

reactjs - react : Couldn't find preset "env react" relative to directory "src"

reactjs - 如何在 react Material 表中禁用某些特定列的编辑?

reactjs - React 17 机车卷轴