захватить http код состояния используя apollo в угловых - PullRequest
2 голосов
/ 30 апреля 2019

Я новичок в угловой. Я использую клиент Apollo для выполнения запросов graphql. Мне нужно проверить код статуса, который я получаю, и вернуть сообщение. пожалуйста, помогите мне сделать то же самое. это код, который я использовал. Как получить код состояния, который я получаю. В приложении будет показано, как я получаю код состояния. enter image description here

let res = this.apollo.use('dataManipulation').query({
      query: myquery,
      fetchPolicy: 'network-only',
      variables:{
        userId: this.userId
      }      
    });
     res.subscribe(listData => {
      this.studyData=[];
      this.resourceData=listData.data['StudyList'];
      this.resourceData.entry.forEach(data =>{

        const customFormat= {
          id:data.resource.id,
          title:data.resource.title,

        }

        this.studyData.push(customFormat);
        console.log("studyData",this.studyData)
      });    
    },
      err => {
        console.log("----------",err);
      }
    );

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Если это для каждого сообщения, я предлагаю вам использовать HTTP Interceptor .

@Injectable()
export class YouInterceptor implements HttpInterceptor {

  constructor() { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      catchError(error => this.handleError(error))
    );
  }

  private handleError(error: HttpErrorResponse): Observable<any> {
    if (error.status === 404) {
      // Do your thing here       }
    return EMPTY;
  }
}

и импортировать его:

@NgModule({
  bootstrap: [AppComponent],
  imports: [...],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: YouInterceptor,
      multi: true
    }
  ]
})
export class AppModule {}
0 голосов
/ 30 апреля 2019

Apollo предоставляет исчерпывающий способ обработки ошибок с помощью ссылок, в частности apollo-error-link .В отличие от использования HttpInterceptor, это позволяет вам указать логику для сетевых ошибок, а также ошибок, включенных в ответ как часть массива errors:

import { onError } from 'apollo-link-error';

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]: Status: ${networkError.statusCode}`);
  }
});

Эта ссылка также может быть объединена с apollo-link-retry для еще более плавной обработки ошибок.Ссылки составляются и затем передаются конструктору вашего клиента, например:

const errorLink = onError(...);
const httpLink = new HttpLink(...);
const link = ApolloLink.from([
  errorLink,
  httpLink,
]);

const client = new ApolloClient({
  link,
  ...
})
...