Запрос PUT не запускается (публикация и ПОЛУЧЕНИЕ работы)

#angular #httpclient

#angular #httpclient

Вопрос:

Методы POST и GET работают отлично, но метод PUT не работает.

У меня есть компонент с этой функцией для обновления данных альбома через подписку:

 onChangeTitle() {
    this.album.name = this.titleInput;
    const albumToEdit: IAlbumEdit = {
      'name': this.album.name,
      'description': this.album.description,
      'public': this.album.public
    };

    this.albumService.putAlbum(this.album.id, albumToEdit).subscribe(
      album => {
        this.album = album;
      },
      error => {
        this.handleError('no se ha podido modificar el álbum: '   error);
        this.titleInput = this.album.name;
      }
    );
  }
  

У сервиса есть эта функция, которая возвращает наблюдаемое:

 putAlbum(id, album: IAlbumEdit): Observable<IAlbum> {
    return this.http.put<IAlbum>(`${AppSettings.API_URL}/album/${id}`, album);
}
  

Это действительно просто, но я не понимаю, почему этот метод httpclient put не запускается (я вижу в сетевом мониторе в Firefox, что запускается любой put).

Более того, у меня есть перехватчик для добавления заголовка авторизации, но он не выполняется с помощью метода PUT.

Мой перехватчик — это:

 export class JwtInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // add authorization header with jwt token if available
    console.log('intercept');
    const currentUser = JSON.parse(localStorage.getItem('currentUser'));
    if (currentUser amp;amp; currentUser.token) {
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${currentUser.token}`
        }
      });
    }

    console.log(request);

    return next.handle(request);
  }
}
  

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

1. Вы уверены, что onChangeTitle метод вызван? Откуда вызывается этот метод?

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

3. Пытались ли вы отключить перехватчик, чтобы убедиться, что это не источник вашей проблемы?

4. Я только что попробовал. С отключенным перехватчиком работает… по крайней мере, запрос PUT запущен.

5. пожалуйста, проверьте вкладку network в браузере. Я думаю, что CORS в этом случае не обрабатывается должным образом на стороне сервера. Один несвязанный совет, который может быть полезен: вы можете сделать что-то вроде return next.handle(request).pipe(tap(item => console.log('next', item), err => console.log('error', err))) для регистрации результата внутри interceptor

Ответ №1:

Проблема была исправлена. Проблема заключалась в том, что я импортировал HTTP_INTERCEPTOR более чем в один модуль. Я исправил проблему, импортируя его только в app.module.ts.