我有一个调用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)+''};
}
};
答案 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)
);
}