2017-01-25 10 views
10

graphql-server-expressapollo-client과 함께 Apollo 스택을 사용하고 있습니다.Apollo 스택에서 오류를 처리하는 방법

내 백엔드가 완벽하지 않아서 오류가 발생할 수 있으므로 해당 경로에 대한 오류가있는 요청에 응답해야합니다.

지금까지 내 주요 문제는 인증 이었기 때문에 오류로 응답했습니다.

return new Error(`${data.status}: ${data.statusText} @ ${data.url}`) 

프론트 엔드에서는 데이터를 쿼리하기 위해 apollo-client를 사용합니다.

return apollo 
     .query({query: gql` 
      query { 
       ${query} 
      }`, 
      forceFetch: forceFetch 
     }) 
     .then(result => { debugger; return result.data }) 
     .catch(error => { debugger; console.error(error); }); 

그러나 쿼리의 한 속성이 오류로 응답하면 catch 기능 만 호출됩니다. 나머지 속성의 데이터까지 전송되었지만 Chrome Dev Tools의 네트워크 탭에 표시됩니다. In은 catch 함수의 오류 객체가 아닙니다.

내 시도는 동일한 개체에서 오류와 데이터를 가져 오는 GraphiQL에서 잘 작동합니다.

그래서 전체 요청을 잃지 않고 속성에 오류를 발생시킬 수 있습니까?

답변

0

약속의 일부인 then에서 수동으로 result.error을 찾고 catch을 사용하지 않아도됩니다. 또한 catch 호출 후이 특정 사례를 처리하기 위해 then을 추가 할 수도 있습니다.

또한 GraphQL 서버에서 formatError을 사용하여 오류 메시지를 수동으로 필터링하고 서식을 지정할 수 있습니다. 그 함수의 몸체는 다음과 같으며, 여러분은 던진 Error에 접근 할 수 있습니다.

formatError: (error) => { 
    return { 
    name: error.name, 
    mensaje: error.message 
    } 
}