Обратный вызов HttpClient error возвращает [объект object] со статусом 500 внутренняя ошибка сервера в угловой

#arrays #json #angular #nestjs #angular-httpclient

Вопрос:

Я хочу заранее поблагодарить вас за вашу помощь. Я только что загрузил приложение Angular NestJS на сервер. Пользователи, электронные письма и роли не отображаются в таблице html. На вкладке «Сеть» и консоли я вижу 500 внутренних ошибок сервера. Я утешил обратный вызов ошибки в этом методе.UserService.subscribe (), чтобы это могло помочь. Но он отображает только [объект объекта].

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

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

Серверная часть вернула код 500, тело было: [объект Объект]

Я понятия не имею об этой ошибке! Означает ли это, что ошибка в NestJS? Может быть, Тело ответа не соответствует формату JSON?

ошибка появляется на вкладке консоли

подробная информация о запросе/ответе

конечной точкой для UserService.ts является «/api/пользователи»

 /* eslint-disable @nrwl/nx/enforce-module-boundaries */ /* eslint-disable no-restricted-imports */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators';  @Injectable({  providedIn: 'root', }) export abstract class RestService {  abstract get endpoint(): string;   constructor(protected http: HttpClient) {}   all(page?: number): Observablelt;anygt; {  let url = this.endpoint;  if (page) {  url  = `?page=${page}`;  }  return this.http.getlt;anygt;(url);  }     create(data: any): Observablelt;anygt; {  return this.http.post(this.endpoint, data);  }   sendEmail(data: any): Observablelt;anygt; {  return this.http.post(this.endpoint, data);  }   get(id: number): Observablelt;anygt; {  return this.http.getlt;anygt;(`${this.endpoint}/${id}`);  }   update(id: number, data: any): Observablelt;anygt; {  return this.http.put(`${this.endpoint}/${id}`, data);  }   delete(id: number): Observablelt;voidgt; {  return this.http.deletelt;voidgt;(`${this.endpoint}/${id}`);  } } 

users.component.ts

 import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { User } from '../../../interfaces/user'; import { ScrollService } from '../../../scroll.service'; import { MailerMailingListService } from '../../../services/mailer-mailing-list.service'; import { UserService } from '../../../services/user.service';  @Component({  selector: 'symbiota-dashboard-users',  templateUrl: './users.component.html',  styleUrls: ['./users.component.css'], }) export class UsersComponent implements OnInit {  users: User[] = [];  emailList: string[] = [];  page = 1;  last_page!: number;  checks = false;  data = [];   constructor(  private userService: UserService,  private mailerMailingListService: MailerMailingListService,  private scrollService: ScrollService,  public router: Router  ) {}   load(): void {  this.userService.all(this.page).subscribe((res: any) =gt; {  this.users = res.data;  console.log(res.data);  this.last_page = res.meta.last_page;  });  }     ngOnInit(): void {  this.load();  //console.log('email list: ', this.emailList);  }  } 

users.component.html

 lt;tbodygt;  lt;tr *ngFor="let user of users; let i = index"gt;  lt;td style="width: 2%"gt;  lt;!-- lt;input type="checkbox" [checked]="checks" /gt; --gt;  lt;input  type="checkbox"  [checked]="checks"  id="i"  (click)="onSelect($event, '')"  /gt;  lt;/tdgt;  lt;td style="width: 2%"gt;{{ user.id }}lt;/tdgt;  lt;tdgt;{{ user.firstName }}lt;/tdgt;  lt;tdgt;{{ user.lastName }}lt;/tdgt;  lt;tdgt;{{ user.email }}lt;/tdgt;  lt;tdgt;will be added laterlt;/tdgt;  lt;tdgt;{{ user.role.name }}lt;/tdgt;  lt;tdgt;  lt;button  class="btn-delete"  style="background-color: #18976b"  [routerLink]="['/dashboard/users', user.id, 'edit']"  gt;  Edit  lt;/buttongt;  lt;button  class="btn-delete"  style="background-color: rgb(226, 73, 73)"  (click)="delete($event, user.id, i)"  gt;  Delete  lt;/buttongt;  lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt; 

Это тип возвращаемых данных, в которых я получаю ошибки. Он находится в файле NestJS. (user.service.ts) Я надеюсь, что это поможет, если кто-нибудь даст мне решение.

 async paginate(page = 1, relations = []): Promiselt;PaginatedResultgt; {  const { data, meta } = await super.paginate(page, relations);   return {  data: data.map((user) =gt; {  const { password, ...data } = user;  return data;  }),  meta,  };  } 

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

1. Можете ли вы опубликовать скриншот ошибки 500 от инспектора? с заголовками и телом запроса и ответа. Вы уверены, что URL-адрес или форматирование URL-адреса верны

2. Я не смог добавить само изображение, но я просто добавил ссылку на изображение вкладки консоли.

3. Я также добавил ссылку с подробным запросом/ответом

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

5. Вы уверены, что nginx настроен правильно? Вы пробовали отправить запрос почтальоном или каким-либо другим способом? Вы можете обойти ufw и попробовать запросить у почтальона напрямую ip-адрес/api/пользователей.