【问题标题】:How to get the response content when server error服务器出错时如何获取响应内容
【发布时间】:2020-03-23 06:11:45
【问题描述】:

我希望我能在服务器返回代码为 5XX 或 4XX 的错误时获得响应内容。

这是我的配置:

API 休息(Laravel):

public function login(Request $request) {
$this->validateLogin($request);
if ($this->attemptLogin($request)) {
    $user = $this->guard()->user();
    $user->generateToken();
    return response()->json($user, 200);
}
return response()->json('Login or password unknown', 401);

}

角度服务:

public getUser(user: User): Observable<any> {
  return this.httpClient.post(this.employeeAPI + 
  'login', JSON.stringify(user), { headers: this.headers });
}

角度组件:

public login(): void {
  this.loginService.getUser(this.user).subscribe(
    (user) => {
      this.user = user;
      this.router.navigate(['/home']);
    },
    (error) => {
    // Is it possible to get the content of response ?

    }
  );
}

谢谢。

【问题讨论】:

  • 首先,您可以使用 console.log(error) 亲自查看您想要的数据是否在该对象中..

标签: angular angular-promise


【解决方案1】:

如果你想以更高的角度看待响应,你必须像这样观察响应:

 return this.httpClient.post(this.employeeAPI
     + 'login', JSON.stringify(user), { headers: this.headers, observe: 'response' });

响应的类型为HttpResponse。这意味着您自己从响应中提取body,但这也允许您检索状态代码。

【讨论】:

  • 只是路过,请问是不是因为当请求响应的状态码是30x,40x或者50x的时候,angular返回的$http.post promise被拒绝了对吧?除非您将 observe: 'response' 作为请求配置的一部分传递,否则允许在 then 块中而不是 catch?...mmmm
  • @Victor 确切地说,通过这样做,状态码超出200-299 范围的请求将触发正常事件,由开发人员检查response.ok 属性并做出相应反应.来源:angular.io/api/common/http/HttpResponseBase#ok
  • 不错!感谢分享...这可以帮助任何为 http-rest-based-api 应用程序编写 javascript (angularjs) Web 客户端的人
  • 确实,这非常接近浏览器中实现的原生Response对象:developer.mozilla.org/fr/docs/Web/API/Response
  • 很抱歉,我不知道如何接受答案,但现在我明白了该怎么做,它已经完成了!最好的问候
猜你喜欢
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2021-04-29
相关资源
最近更新 更多