Reactjs 如何在React admin中处理服务器错误?

Reactjs 如何在React admin中处理服务器错误?,reactjs,react-admin,Reactjs,React Admin,我使用GraphQL瑜伽作为后端。 它返回的错误格式与文档不匹配。但我需要他们的翻译。在React-admin中是否有一个地方可以捕获来自服务器的所有错误,并使它们符合通知组件的预期 Error:{ extraInfo: undefined graphQLErrors: { locations: [{ column: 3, line: 2 }] message: "User with such login does not exist."

我使用GraphQL瑜伽作为后端。
它返回的错误格式与文档不匹配。但我需要他们的翻译。在
React-admin
中是否有一个地方可以捕获来自服务器的所有错误,并使它们符合通知组件的预期

Error:{
    extraInfo: undefined
    graphQLErrors: {
        locations: [{ column: 3, line: 2 }]
        message: "User with such login does not exist."
        path: ["login"]
    }
    message: "GraphQL error: User with such login does not exist."
    networkError: null
    stack: "Error: GraphQL error: User with such login does not exist.↵    at new ApolloError (http://localhost:3000/static/js/1.chunk.js:39388:24)↵    at Object.next (http://localhost:3000/static/js/1.chunk.js:38008:21)↵    at notifySubscription (http://localhost:3000/static/js/1.chunk.js:270732:18)↵    at onNotify (http://localhost:3000/static/js/1.chunk.js:270776:3)↵    at SubscriptionObserver.next (http://localhost:3000/static/js/1.chunk.js:270828:7)↵    at Object.next (http://localhost:3000/static/js/1.chunk.js:47919:22)↵    at notifySubscription (http://localhost:3000/static/js/1.chunk.js:270732:18)↵    at onNotify (http://localhost:3000/static/js/1.chunk.js:270776:3)↵    at SubscriptionObserver.next (http://localhost:3000/static/js/1.chunk.js:270828:7)↵    at http://localhost:3000/static/js/1.chunk.js:48354:18"
}

我在环回中遇到了同样的问题,因为它将错误发送到错误对象中,而不是直接发送到响应的message属性中。我所做的是:

创建自己的httpClient,如用于设置身份验证令牌的文档中所示

const httpClient = (url, options = {}) => {
    // ...
    return fetchUtils.fetchJson(url, options);
}
const dataProvider = jsonServerProvider('http://localhost:3000/api', httpClient);
在您的管理组件中:

<Admin dataProvider={dataProvider}>
您应该在这里设置json响应中的错误消息

最后,您只需将fetchUtils.fetchJson更改为fetchJson方法:

const httpClient = (url, options = {}) => {
    // ...
    return fetchJson(url, options); // <--- change this line
}
consthttpclient=(url,options={})=>{
// ...

return fetchJson(url,options);//我的问题是,我没有正确地在数据提供程序中抛出错误,下面是我如何让react admin显示HTTP错误的:

从“react admin”导入{GET_LIST};
异步函数providerApi(类型、资源名称、参数){
让我们重新来过;
试一试{
开关(类型){
案例获取列表:
res=等待MyGetList(resourceName,参数);
打破
/*所有其他方法*/
}
返回res;
}捕获(错误){
const errorMsg=error.toString();
常量代码=translateErrorMessageToCode(errorMsg);
const errorObj={状态:代码,消息:errorMsg,json:res};
抛出错误OBJ;
}
}
函数translateErrorMessageToCode(errorMsg){
if(errorMsg.includes('unauthenticated')){
返回401
}
if(errorMsg.includes('aborted')){
返回409
}
if(errorMsg.includes('not-found')){
返回404
}
返回200
}

谢谢,但它不适用于ra data graphql simple(当我抛出HTTP错误时,它会将我从react管理员中注销)session@BenWinding拒绝(“字符串或翻译键”)然后,它将在通知弹出窗口中显示,而不会崩溃。我确实解决了这个问题,我的数据提供程序没有正确处理错误。我将在下面添加我的修复程序。谢谢,我必须在返回对象中包含
数据:errorMsg
,以便react admin v3.8.2在前端正确读取它,但您的解决方案可以工作预计起飞时间。
return Promise.reject(new HttpError((json && json.error && json.error.message) || statusText, status, json));
const httpClient = (url, options = {}) => {
    // ...
    return fetchJson(url, options); // <--- change this line
}