2017-04-27 48 views
17

我一直在審查Apollo文檔,但我沒有看到如何去處理Apollo客戶端中服務器錯誤的信息。Apollo客戶端(反應):處理意外錯誤

例如,假設服務器之一:

  • 超時
  • 變得不可
  • 意外失敗

如何把這個在客戶端進行處理?阿波羅目前失敗的錯誤,如:

Unhandled (in react-apollo) Error: GraphQL error: Cannot ...

我想避免這種情況發生並處理這些錯誤。我怎樣才能使用React Apollo?


參考:

我目前使用的陣營,阿波羅和終極版

回答

6

錯誤被沿error場傳遞您的組件道具:打印http://dev.apollodata.com/react/api-queries.html#graphql-query-data-error

function MyComponent({ data }) { 
    if (data.error) { 
    return <div>Error!</div>; 
    } else { 
    // ... 
    } 
} 

export default graphql(gql`query { ... }`)(MyComponent); 

這消息,如果我們檢測到有一個錯誤和error場未在組件訪問。

您可以編寫更高階的組件來以通用的方式處理錯誤,以便您可以用所有組件包裝所有組件。

+0

怎麼樣阿波羅服務器等發送錯誤:proxyConsole。 js:54 Error:GraphQL error:[object Object] at new ApolloError(ApolloError.js:34) at QueryManager.js:129 at stackdave

0

A 服務器錯誤可能意味着沒有來自服務器的數據對象,因此也沒有可用的錯誤消息。

假設您查詢某些用戶數據,以便結果對象爲data.user。然後,你要測試:

if (data.loading !== true && data.user === undefined) { 
    /* handle the error here */ 
} 

如果你不希望看到的錯誤信息,您可以添加選項,您的查詢:

graphql(query, { 
    options: { 
    errorPolicy: 'ignore' 
    } 
})