Angular 5个Http错误未从web服务调用返回

Angular 5个Http错误未从web服务调用返回,angular,http,error-handling,Angular,Http,Error Handling,我正在Angular 5中使用HttpClientModule进行一个web服务调用,它适用于所有200个状态响应。但是,如果有任何400个状态,它只是等待,等待,等待,最终得到一个503状态 例如,如果我使用正确的用户名/密码调用此函数,它将正常工作,我将返回200个状态和用户对象。但是,如果我输入了错误的用户名/密码,我不会得到400错误,大约一分钟后我会得到503错误 服务器端日志显示webservice正在向我的请求返回400状态,但没有返回任何内容 以下是我的web服务调用代码: lo

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

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

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

以下是我的web服务调用代码:

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);
      }
    );
  });
}

下面是日志:

结果表明服务器有一个bug。日志中关于媒体类型的错误。解决此问题后,服务器将返回正确的错误响应,我的代码将处理这些响应。

您在网络面板中看到了什么?最终angular会将一个请求交给浏览器,然后在浏览器和服务器之间传递,直到响应返回。发布的Chrome网络登录图像是否正确,以处理错误响应?我自己仍然是angular 1.x以外的noob,但这看起来很合理,另一件事是基于你的网络请求的图像,这是在你的web服务器说了400个坏凭据或其他什么之后,并且响应被发送到浏览器,因为它看到一个503,你可以右键单击网络面板中的请求并复制为curl请求,然后将其粘贴到安装了curl或cygwin的unix终端中,然后在浏览器之外查看请求,但可能会得到相同的503响应。基本上我在想heroku配置上的一些东西也许?这里有一条皱纹。它在postman中工作,并返回400错误。没问题。很高兴你找到了它,事实上它是服务器端的东西。在大多数情况下,在这种情况下,angular并不是真正的罪魁祸首或嫌疑犯,因为httpservice基本上是一个围绕着xhr对象的包装器,而xhr对象也是广泛使用和测试的浏览器所固有的