【问题标题】:Angular HttpResponse<boolean> returns boolean value, not the expected HttpResponseAngular HttpResponse<boolean> 返回布尔值,而不是预期的 HttpResponse
【发布时间】:2019-08-29 13:30:07
【问题描述】:

我有一个调用 NodeJS API 的角度方法。我希望返回对象是一个具有布尔值主体类型的 HttpResponse,但它返回一个布尔值。我错过了什么?

输出(来自 Angular API 调用中的 console.log):true

预期:{statusCode:200, headers:..., body: true}

Angular API 调用

this.lsvc.login(login,pwd).subscribe((x:HttpResponse<boolean>)=>{
  console.log(JSON.stringify(x))
  if(x)   //<--------expected to need x.body
    alert('login success')
  else
    alert('login failed')
})

Angular 服务(调用 JS API)

   public login(user,pwd): Observable<HttpResponse<boolean>> {
     console.log('login: '+user+' '+pwd)
       return this.httpClient.post<HttpResponse<boolean>>(this.lambdaUrl+'login',{"email":user,"password":pwd}).pipe(
        catchError(this.handleError)
      );
   }

NodeJS API:

'use strict';
module.exports.login = async event => {

  try{
    var obj=JSON.parse(event.body);  
    if(obj.email=='xx' && obj.password=='xxxx')
      return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(true)};
    return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(false)};
  }
  catch(e)
  {
    return {statusCode: 500, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(e)+''};
  }
};

【问题讨论】:

    标签: angular httpresponse


    【解决方案1】:

    Angular http 客户端模块将仅返回响应正文,如果您想要所有 http 响应,如标头状态和正文,您必须使用观察选项,请检查 angular docs

     getConfigResponse(): Observable<HttpResponse<Config>> {
       return this.http.get<Config>(
         this.configUrl, { observe: 'response' });
      }
    

    【讨论】:

      【解决方案2】:

      默认情况下,Angular HttpClient 只返回成功响应的正文。如果出现错误,则返回完整的 HttpErrorResponse。如果需要完整的 HttpResponse,HttpClient 提供了额外的配置。这是HttpClient.post 方法的第三个参数——选项。您可以在选项中使用observe: 'response' 来获取完整的HttpResponse 对象(Angular Docs)。您将不得不修改您的角度服务以包含此内容。

      public login(user,pwd): Observable<HttpResponse<boolean>> {
          console.log('login: '+user+' '+pwd)
          return this.httpClient.post<HttpResponse<boolean>>(this.lambdaUrl+'login',{"email":user,"password":pwd}, {observe: 'response'}).pipe(
          catchError(this.handleError)
          );
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-20
        • 1970-01-01
        • 2014-05-28
        • 2019-10-13
        • 1970-01-01
        • 2019-06-12
        • 2016-08-08
        • 2020-06-26
        • 1970-01-01
        相关资源
        最近更新 更多