在我的服務器上,我的GraphQL實現使用Flask,Graphene和SQLAlchemy。理想情況下,我想能夠簡單地操縱頭和返回401錯誤響應,但GraphQL返回的一切,200如何在Relay中捕獲GraphQL錯誤消息?
使用flask.abort(401),但是我至少能得到這樣的響應:
...
"errors": [
{
"message": "401 Unauthorized: The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.",
"locations": [
{
"line": 11,
"column": 3
}
]
}
]
...
我認爲這是一種妥協,我可以在這個時間點與之合作。然而;因爲沒有東西可以是那麼簡單......我不確定我如何抓住這個錯誤信息。我讀過QueryRenderer
本身可能會導致這些GraphQL錯誤的問題,但我可以設法在Environment
中的Network
對象中攔截它們......本質上看起來像這樣。
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: {…}}
__proto__: Promise[
[PromiseStatus]]: "resolved"
[[PromiseValue]]: Object
data: {viewer: {…}}
errors: Array(4)
0: {locations: Array(1), message: "401 Unauthorized: The server could not verify that…nderstand how to supply the credentials required."}
1: {locations: Array(1), message: "401 Unauthorized: The server could not verify that…nderstand how to supply the credentials required."}
2: {locations: Array(1), message: "401 Unauthorized: The server could not verify that…nderstand how to supply the credentials required."}
3: {locations: Array(1), message: "401 Unauthorized: The server could not verify that…nderstand how to supply the credentials required."}
length: 4
__proto__: Array(0)
__proto__:Object
我真的不覺得在我的環境的網絡層處理這個錯誤將是正確的方式來管理這個。 QueryRenderer似乎是最有意義的...我已經將它設置爲實際的單一來源。
如果不是很明顯,我正在使用Relay Modern。因此,基於Relay Classic的任何解決方案都不適用。
編輯:拋開錯誤信息,我的動機是正確處理JWT令牌。我認爲我正在尋找的解決方案與處理這些錯誤響應無關,而是擴大了我對智威湯遜的理解。
我不知道,我的客戶就可以輕鬆地使用包到JWT解碼如jwt-decode
,然後讓我訪問過期信息......最終我預見導致我某種形式的中間件實現的這將評估JWT的剩餘時間,以及是否需要更新。
如何將錯誤對象使用這個'onCompleted'callback?它是否適用於Relay Modern?它是否也可用於查詢? – Mendes
它在Relay Modern上可用。我無法描述比文檔更多的用法。這是爲了突變。當我回答這個問題時,這就是我錯過的觀點。 – tkymtk