2017-02-06 9 views
2

apollographql/graphql-server를 사용하고 있습니다. 나는이 개 질문이Apollo GraphQL 오류 처리

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

: 같은 서버 응답은 볼

  1. 내가 던지거나 오류 개체를 반환하고이 응답의 오류 배열에 푸시되지만 응답 할 수있는 발견 내가 그렇게하는대로 곧 보내진다. 둘 이상의 오류를 반환하려면 어떻게해야합니까?

  2. 오류 배열은 버그 또는 응용 프로그램 오류 또는 서버 오류에만 사용됩니까? 데이터 검사 및 유효성 검사 오류를 데이터 객체 내부에 배치해야합니까?

미리 감사드립니다.

답변

1
  1. 는 응답을 한 개 이상의 오류를 반환해야 할 경우 가장 가능성이 오류의 배열 자신을 구축해야합니다, 당신은 준비가되면 다음의 graphql 오류를 반환합니다. 나는 내 코드에서 비슷한 것을한다. 대부분의 경우 오류가 발생하면 어쨌든 중지하고 클라이언트에게 문제를 반환하고 싶습니다.

  2. 일반적인 '행복한 경로'를 벗어나는 것은 graphql 오류이므로 오류를 반환하고 싶을 것입니다. 클라이언트 측 코드가 해당 데이터에 의존하므로 클라이언트가 서버에서 발생하는 예기치 않은 문제에 응답 할 수 있어야합니다. 해결되거나 비어있는 결과 세트 만 정상으로 돌아가고 오류가 발생하지 않습니다. 다른 것, 누락 된 매개 변수, 데이터베이스 오류 등은 오류를 반환하기를 원할 것입니다.

희망 하시겠습니까? :)

+0

답변 해 주셔서 감사합니다. 1) 나는 문자열 배열로 에러 배열이나 에러 배열을 던지려고했으나 행운은 없었다. 어떻게하는지 아십니까? 2) 정상적인 루틴에서는 서버 응답의 오류 배열이 양식 유효성 검사와 같은 오류에는 적합하지 않은 것처럼 데이터 개체에 잡힌 오류를 대신 배치합니다. – James

0

에 체크 아웃 : 자신 읽어에서 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' 
    } 
    }); 
}