Угловая Обработка Ошибок Apollo
Привет всем я немного застрял на проблеме с apollo-angular и apollo-link-error. Я попробовал несколько разных способов, и мне кажется, что я не могу поймать никаких ошибок на стороне клиента в моем angular web app. Я разместил свои попытки ниже. Любые предложения или дополнительная пара глаз будут очень признательны.
В основном все, что я пытаюсь сделать, это когда возникает ошибка, чтобы подсказать моему пользователю о проблеме. Если у кого-то есть какой-то альтернативный пакет npm, кроме apollo-link-error, я все уши.
Попытка 1:
export class AppModule {
constructor (apollo: Apollo, httpLink: HttpLink) {
apollo.create({
link: httpLink.create({
uri: 'http://localhost:8080/graphql'
}),
cache: new InMemoryCache()
});
const error = onError(({ networkError }) => {
const networkErrorRef:HttpErrorResponse = networkError as HttpErrorResponse;
if (networkErrorRef && networkErrorRef.status === 401) {
console.log('Prompt User', error);
}
});
}
}
Попытка 2:
export class AppModule {
constructor (apollo: Apollo, httpLink: HttpLink) {
apollo.create({
link: httpLink.create({
uri: 'http://localhost:8080/graphql'
}),
cache: new InMemoryCache()
});
const error = onError(({networkError}) => {
if (networkError.status === 401) {
console.log('Prompt User', error);
}
});
}
}
Попытка 3:
export class AppModule {
constructor (apollo: Apollo, httpLink: HttpLink) {
apollo.create({
link: httpLink.create({
uri: 'http://localhost:8080/graphql'
}),
cache: new InMemoryCache()
});
const link = onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors)
graphQLErrors.map(({ message, locations, path }) =>
console.log(
`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`,
),
);
if (networkError) console.log(`[Network error]: ${networkError}`);
});
}
}
2 ответа:
Вы можете видеть
apollo-link-error
как промежуточное ПО, поэтому вам нужно добавить его в процесс выборки в клиенте apollo.Это означает, что вы должны создать еще одну ссылку apollo, которая сочетает в себе как http, так и ссылку error:
import { ApolloLink } from 'apollo-link'; import { HttpLink } from 'apollo-link-http'; import { onError } from 'apollo-link-error'; ... const errorLink = onError(({ graphQLErrors, networkError }) => { if (graphQLErrors) graphQLErrors.map(({ message, locations, path }) => console.log( `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`, ), ); if (networkError) console.log(`[Network error]: ${networkError}`); }); } } const httpLink = new HttpLink({ uri: "http://localhost:8080/graphql" }); const httpLinkWithErrorHandling = ApolloLink.from([ errorLink, httpLink, ]); apollo.create({ link: httpLinkWithErrorHandling, cache: new InMemoryCache() }); ...
Другое возможное решение:
import { HttpLink } from 'apollo-link-http'; import { onError } from 'apollo-link-error'; ... const errorLink = onError(({ graphQLErrors, networkError }) => { if (graphQLErrors) graphQLErrors.map(({ message, locations, path }) => console.log( `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`, ), ); if (networkError) console.log(`[Network error]: ${networkError}`); }); } } const link = httpLink.create({ uri: environment.applications.mAPI.adminEndPoint, }); apollo.create({ link: errorLink.concat(link), cache: new InMemoryCache() }); ...