Как устранить внутреннюю ошибку сервера в API

#angular #api #internal-server-error

Вопрос:

Я новичок в Angular, и у меня уже есть проект, над которым нужно работать. У меня есть API, созданный с помощью Symfony, а клиент-с помощью Angular. У меня есть модель под названием Цитата. При получении предложения маршрута/{id} это обычно работает, за исключением некоторых предложений, где у меня есть эта ошибка:

 GET http://api.local/api/quotations/1381 500 (Internal Server Error) core.js:12501 ERROR 
HttpErrorResponse {headers: HttpHeaders, status: 500, statusText: "Internal Server Error", url: "http://api.local/api/quotations/1381", ok: false, …}
data: {data: {…}, notifications: Array(0)}
error: {data: {…}, notifications: Array(0)}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure response for http://api.local/api/quotations/1381: 500 Internal Server Error"
name: "HttpErrorResponse"
ok: false
repeatRequest: ƒ (newRequest)
request: HttpRequest {url: "http://api.local/api/quotations/1381", body: null, reportProgress: false, withCredentials: false, responseType: "json", …}
status: 500
statusText: "Internal Server Error"
url: "http://api.local/api/quotations/1381"
__proto__: HttpResponseBase
 

Я не могу найти различий между теми, кто работает, и теми, кто этого не делает. Когда я пытаюсь получить доступ к нему с помощью API, а не клиента, у меня возникает эта ошибка:

 {
  "data": {
    "data": {
      "@context": "/api/contexts/Error",
      "@type": "hydra:Error",
      "hydra:title": "An error occurred",
      "hydra:description": "Notice: Trying to get property 'response' of non-object",
 

Как я уже сказал, я новичок в Angular и не знаю, где искать, поэтому я дам вам часть кода, в котором в клиенте возникает ошибка.
цитата.компонент.ts:

 ngOnInit() {
    this.route.paramMap
      .pipe(
        map(params => params.get('quotationId')),
        withLatestFrom(this.route.queryParamMap),
        switchMap(data => {
          if (!!data[1].get('sync') amp;amp; data[1].get('sync') === 'true') {
            return this.quotationService.syncQuotation( data[0]);
          }
          return this.quotationService.get( data[0]);
        }),
        map(data => {
          console.log(data);
          if (!data['@id']) {
            this.router.navigate(['/devis',  data.id]);
            return data;
          }
          return data;
        }),
        withLatestFrom(this.store.pipe(select(selectQuotationState))),
        switchMap(data => {
          this.isFav = !!data[1].favorites.find(element => element.id === data[0].id);
          this.quotation = data[0];
          console.log(this.quotation);
          return this.quotationService.getJobs(data[0]);
        }),
        switchMap((jobs: QuotationJob[]) => {
          this.jobs = jobs;
          return this.quotationService.search(this.quotation.clientName);
        })
      )
      .subscribe((searchResults: Quotation[]) => {
        this.searchResults = searchResults;
      });
  }
 

Строка » верните это.quotationService.get( данные[0]);» вызывает предложение.сервис.ts:

 get(id: number): Observable<Quotation> {
    return this.rg.one('quotations', id).get();
  }
 

Например, если я спрошу идентификатор 2, он будет работать нормально, я получу нужные мне данные, но если я спрошу идентификатор 4, это вызовет ошибку, когда оба идентификатора 2 и 4 находятся в базе данных ! Я не знаю, что делать.

Спасибо за вашу помощь !

Комментарии:

1. Это не имеет ничего общего с Angular, это внутренняя проблема. Возможно, ваш запрос неверен? Вы проверили информацию о запросе в инструментах разработчика браузера?

2. Работает ли ваш запрос при отправке с почтальона? Как сказал Дэниел, это внутренняя проблема, и первым шагом было бы попытаться воспроизвести ее (т. Е. классическую отладку).

3. Я проверил информацию о запросе, но не вижу, что не так. Когда я делаю это в postman, я также получаю сообщение об ошибке «Внимание: пытаюсь получить свойство»ответ» не-объекта». И если я сделаю это с другим идентификатором, я получу правильные данные.

4. Вам следует выполнить отладку на сервере. Если тот же самый код работает для идентификатора 2, но не для идентификатора 4, ошибка, скорее всего, на сервере (возможно, некоторые несоответствия в данных …)