gpt4 book ai didi

angular - 在 Angular 8 中调用 httpClient.delete() 时无法处理 HTTP/404

转载 作者:行者123 更新时间:2023-12-05 01:14:29 25 4
gpt4 key购买 nike

我有 Springboot 2.1 端点,它在调用 DELETE 方法时返回 HTTP/404。Angular 8 应用程序使用 HttpClient 调用该端点。它已被精简为最简单的代码。

如果我在后端返回 HTTP/404 时调用 httpClient.delete('url').subscribe();,我将无法处理错误。Angular 在控制台中抛出此错误:错误类型错误:您在需要流的位置提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable。

我尝试按照 Angular http 客户端描述中的描述处理错误,但没有帮助。在调用任何错误处理代码之前,Angular 在控制台中抛出错误并且不执行任何错误处理。

这是Java代码

@RestController
@RequestMapping("/api/test")
@RequiredArgsConstructor
class TestController {

@DeleteMapping("/{id}")
public ResponseEntity deleteObject(@PathVariable("id") Long id) {
return ResponseEntity.notFound().build();
}
}

调用此端点的 Angular 代码是:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class ObjectsService {

constructor(private httpClient: HttpClient) {
}

deleteObject() {
return this.httpClient.delete('http://localhost:8090/api/test/5').subscribe();
}
}

Chrome 显示响应是:

Request URL: http://localhost:8090/api/test/5
Request Method: DELETE
Status Code: 404
Remote Address: [::1]:8090
Referrer Policy: no-referrer-when-downgrade

不幸的是,我没有正常执行,而是在控制台中收到错误:

ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:27)
at subscribeToResult (subscribeToResult.js:11)
at CatchSubscriber.error (catchError.js:38)
at XMLHttpRequest.onLoad (http.js:2476)
at ZoneDelegate.invokeTask (zone-evergreen.js:391)
at Object.onInvokeTask (core.js:39679)
at ZoneDelegate.invokeTask (zone-evergreen.js:390)
at Zone.runTask (zone-evergreen.js:168)
at ZoneTask.invokeTask [as invoke] (zone-evergreen.js:465)
at invokeTask (zone-evergreen.js:1603)

编辑:还有处理错误的 HTTPInterceptor:

  private handleErrors(err: HttpErrorResponse): Observable<any> {
if (err.status === 401) {
this.loginService.redirectToUrl = this.router.url;
this.router.navigate(['/login']);
return of(err.message);
}
}

感谢@igor,发现了“missing else”。在拦截器中添加 HTTP/404 处理解决了这个问题。

最佳答案

如果未达到在可观察对象上执行的错误处理代码,那么您有一个 HttpInterceptor配置在到达此代码之前正在处理错误。

关于angular - 在 Angular 8 中调用 httpClient.delete() 时无法处理 HTTP/404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com