2017-02-06 11 views
2

私はapollographql/graphql-serverを使用しています。私は2つの質問があるApollo GraphQLエラー処理

{"data":{...},"errors":[{"message":"...","locations":...}]} 

::のようなサーバーの応答が見

  1. 私が投げるか、エラーオブジェクトを返し、それが応答のエラー配列にプッシュされますが、応答ができることを見つけます私がそうするとすぐに送られます。複数のエラーを返すにはどうすればよいですか?

  2. バグのようなアプリケーションエラーまたはサーバーエラーのエラーアレイが想定されていますか?データチェックと検証エラーをデータオブジェクトの内部に配置する必要がありますか?

ありがとうございます!

答えて

1
  1. は、あなたが応答を複数のエラーを返すために必要がある場合は、最も可能性の高いエラーの配列を自分で構築する必要があるでしょう、そしてあなたは準備ができたら、次に、graphqlエラーを返します。私は自分のコードで何か似ています。たいていの場合、エラーが発生した場合は、とにかくそこで停止して問題をクライアントに戻したいと考えています。

  2. グラフパスエラーの典型的な「ハッピーパス」以外のものは、エラーを返す必要があります。クライアント側のコードはそのデータに依存するため、クライアントがサーバー上で発生する予期しない問題に対応できるようにします。解決済みまたは空の結果セットは、正常に戻ってエラーを出力しない唯一のものです。それ以外のもの、欠落しているパラメータ、データベースエラーなどは、エラーを返すことになります。

希望します。 :)このうち

+0

あなたの答えに感謝します。 1)私は投げたり、エラーの配列を返したり、前に文字列の配列を返したりしましたが、運はありません。あなたはそれをする方法を知っていますか? 2)通常のルーチンでは、サーバーの応答からのエラー配列がフォーム検証のようなエラーには適していないように、データオブジェクトに捕捉されたエラーを代わりに置きます – James

0

チェック:自分のReadMeからhttps://github.com/thebigredgeek/apollo-errors

いくつかのエラーを作成します。

import { createError } from 'apollo-errors'; 

export const FooError = createError('FooError', { 
    message: 'A foo error has occurred' 
}); 

は、書式設定フックアップ:

import express from 'express'; 
import bodyParser from 'body-parser'; 
import { formatError } from 'apollo-errors'; 
import { graphqlExpress } from 'apollo-server-express'; 
import schema from './schema'; 

const app = express(); 

app.use('/graphql', 
    bodyParser.json(), 
    graphqlExpress({ 
    formatError, 
    schema 
    }) 
); 

app.listen(8080) 

は、いくつかのエラーを投げる:

import { FooError } from './errors'; 

const resolverThatThrowsError = (root, params, context) => { 
    throw new FooError({ 
    data: { 
     something: 'important' 
    } 
    }); 
} 
関連する問題