2016-03-01 94 views
5

比方說,我想創建一個騎自行車的突變在突變處理錯誤

var createBike = (wheelSize) => { 
    if (!factoryHasEnoughMetal(wheelSize)) { 
    return supplierError('Not enough metal'); 
    } 
    return factoryBuild(wheelSize); 
} 

時,有沒有足夠的鋼材他們閃亮的車輪會發生什麼?我們可能需要客戶端的錯誤。如何獲取他們從我的graphQL服務器與下面的突變:

// Mutations 
mutation: new graphql.GraphQLObjectType({ 
    name: 'BikeMutation', 
    fields:() => ({ 
    createBike: { 
     type: bikeType, 
     args: { 
     wheelSize: { 
      description: 'Wheel size', 
      type: new graphql.GraphQLNonNull(graphql.Int) 
     }, 
     }, 
     resolve: (_, args) => createBike(args.wheelSize) 
    } 
    }) 
}) 

是化繁爲簡返回該服務器的/我已經定義了一些錯誤類型?

回答

6

不完全相信,如果這就是你以後......

只是拋出一個新的錯誤,它應該返回像

{ 
    "data": { 
    "createBike": null 
    }, 
    "errors": [ 
    { 
     "message": "Not enough metal", 
     "originalError": {} 
    } 
    ] 
} 

您的客戶端的東西應該只處理響應

if (res.errors) {res.errors[0].message} 

我所做的就是傳遞一個帶有errorCode和消息的對象,在這個階段,最好的方法就是使它變成stringify。

throw new Errors(JSON.stringify({ 
     code:409, 
     message:"Duplicate request......" 
})) 

注意:你也可能有興趣在這個庫https://github.com/kadirahq/graphql-errors

可以屏蔽所有的錯誤(轉消息「內部錯誤」),或定義userError(「消息給客戶端」),這這些不會被取代。

+0

感謝您指向graphql-errors庫。 –

+0

哈哈,太簡單了!感謝您的明確迴應和[graphql-errors](https://github.com/kadirahq/graphql-errors) –

+0

規範總是直接從API返回本地化消息,而不是讓客戶端處理翻譯的錯誤鍵它喜歡? – dSebastien