【问题标题】:Angular 5 Http Errors not returning from web service callAngular 5 Http 错误未从 Web 服务调用返回
【发布时间】:2018-05-29 07:08:16
【问题描述】:

我正在使用 HttpClientModule 在 Angular 5 中进行 Web 服务调用,它适用于所有 200 个状态响应。但是,如果有任何 400 状态,它只会等待、等待和等待,最终获得 503 状态。

例如,如果我使用正确的用户名/密码调用此函数,它会起作用,我会返回 200 状态和用户对象。但是,如果我输入了错误的用户名/密码,我不会收到 400 错误,大约一分钟后我会收到 503 错误。

服务器端日志显示 web 服务正在向我的请求返回 400 状态,但没有任何返回。

这是我的网络服务调用代码:

login(username: string, password: string): Observable<boolean> {
  const url = this.getUrl('/v1/users/login');
  const headers = {
    headers: new HttpHeaders({'Content-Type': 'application/json', 'transactionId': uuid.v4()})
  };
  const body = { username, password };

  return new Observable<boolean>( observer => {
    this.http.post<User>(url, body, headers).subscribe(
      (user: User) => {
        console.log('login: Success: ', user);
        observer.next(true);
      },
      (err: HttpErrorResponse) => {
        console.log('login: Error: ', err);
        observer.next(false);
      }
    );
  });
}

这是Chrome Network日志:

【问题讨论】:

  • 您在网络面板中看到了什么?最终,角度将请求交给浏览器,然后在浏览器和服务器之间传递,直到响应返回。
  • 发布的 Chrome 网络日志图片
  • 我的代码处理错误响应是否正确?
  • 我自己仍然是一个菜鸟,除了 angular 1.x 之外的任何东西,但它看起来很合理,其他的事情是基于你的网络请求的图像,它是在你的网络服务器说 400 坏之后凭据或其他任何内容以及发送到浏览器的响应(因为它看到 503)您可以右键单击网络面板中的请求并复制为 curl 请求,然后将其粘贴到安装了 curl(或 cygwin)的 unix 终端中并查看在浏览器之外请求,但可能会得到相同的 503 响应。基本上我在想一些关于heroku config的东西?
  • 这是一个皱纹。它在邮递员中工作并返回400错误没问题。

标签: angular http error-handling


【解决方案1】:

原来服务器有一个错误。日志中出现有关“媒体类型”的错误。解决此问题后,服务器现在将发回正确的错误响应,而我的代码正在处理它们。

【讨论】:

  • 很高兴你发现了它,实际上是服务器端的东西。在大多数情况下,在这种情况下,Angular 并不能真正受到指责或怀疑,因为 httpservice 基本上是围绕浏览器原生的 xhr 对象的包装器(也被广泛使用和测试)
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
相关资源
最近更新 更多