Как мне заставить клиента Apollo сообщить мне, где в моем коде произошла ошибка? - PullRequest
0 голосов
/ 24 апреля 2020

Я изучаю React / Apollo, и когда я представляю ошибки, я получаю типичные красные исключения в моей консоли Chrome. Однако, с Apollo, он не говорит мне, где в моем коде ошибка началась, как это происходит в React или других средах. При работе с перехватчиками, которые запускают запросы в нескольких компонентах, поиск источника проблемы происходит крайне медленно.

Используете ли вы какие-либо приемы для отладки вашего кода Apollo или вы можете каким-то образом улучшить обратную связь об ошибках?

Вот что я вижу:

ApolloError.ts:46 Uncaught (in promise) Error: GraphQL error: User is not authenticated
    at new ApolloError (ApolloError.ts:46)
    at QueryManager.ts:1241
    at Object.next (Observable.js:322)
    at notifySubscription (Observable.js:135)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.next (Observable.js:235)
    at observables.ts:12
    at Set.forEach (<anonymous>)
    at Object.next (observables.ts:12)
    at notifySubscription (Observable.js:135)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.next (Observable.js:235)
    at httpLink.ts:142

1 Ответ

0 голосов
/ 25 апреля 2020

Во-первых, я хотел бы обратиться к указанной ошибке c, которую вы видите в своем вопросе.

User is not authenticated будет указывать мне, что это не проблема на стороне клиента (большинство скорее всего) и вы пытаетесь сделать запрос, требующий аутентификации. Причина, по которой вы не прошли проверку подлинности, может быть связана с клиентом, но любой инфраструктуре веб-интерфейса будет практически невозможно сказать вам, где эта проблема.

Что касается общих методов отладки apollo вопросы клиента go? Что ж, при использовании @ apollo /act-hooks вы получите отзыв об ошибках из значения, возвращаемого ловушкой напрямую. Например, с помощью ловушки useQuery:


const Employee = () => {
    const { data, loading, error } = useQuery(LOAD_EMPLOYEE_DATA_QUERY);

    if (error) {
        console.error(error);

        throw error;
    }

   // ...
}

Если что-то пойдет не так, на клиенте или на сервере, вы получите отзыв об этом в объекте error. Это делает его довольно простым для отладки.

Иногда все не так просто. Следующее место, на которое я обычно обращаю внимание при возникновении проблем с клиентом apollo, - это инструменты разработчика Apollo. Он покажет вам, какие запросы были сделаны и их результаты.

Наконец, если это не сработает, тогда я начну копать вкладку сети для запросов XHR на /(insert your graphql endpoint here). Если красный, то вы должны посмотреть на вывод консоли с вашего сервера.

Надеюсь, что это поможет!

...