Angular HttpResponse <boolean>返回布尔值,而不是预期的HttpResponse

时间:2019-08-29 03:56:57

标签: angular httpresponse

我有一个调用NodeJS API的角度方法。我期望返回对象是具有主体类型为boolean的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 Service(调用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)+''};
  }
};

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

默认情况下,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)
    );
}