angular - Angular 7 - HttpClient“对象类型上不存在属性'成功'”
问题描述
当有人注册时,我会将信息发布到我的后端。成功注册用户后,我收到 {success: true, msg: "User registered"} 的 json 响应。我的问题是当我尝试执行 if 语句来检查成功是否设置为 true 时。
这是我的代码不起作用:
// Register User
this.apiService.registerUser(user).subscribe(data => {
if(data.success) {
this.flashMessage.show('Registration successful', { cssClass: 'alert-success', timeout: 3200 });
} else {
this.flashMessage.show('Registration failed', { cssClass: 'alert-danger', timeout: 3200 });
}
});
我能够 console.log 数据的响应,它返回:
{success: true, msg: "User registered"}
这是我的 ApiService 中的代码:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { User } from '../models/User';
@Injectable({
providedIn: 'root'
})
export class ApiService {
private baseUri: string = 'http://localhost:5000/api';
private headers = new HttpHeaders().set('Content-Type', 'application/json');
constructor(private http: HttpClient) { }
registerUser(user: User) {
return this.http.post(this.baseUri + '/register', user, { headers: this.headers });
}
}
这是我的注册组件中的代码:
onRegisterSubmit() {
const user: User = {
firstName: this.firstName,
lastName: this.lastName,
email: this.email,
username: this.username,
password: this.password
};
// Register User
this.apiService.registerUser(user).subscribe(data => {
console.log(data);
});
}
我对使用角度很陌生,更不用说后端了,所以如果你能解释为什么会发生这个错误,我将不胜感激。
如果您需要更多信息,请告诉我。
解决方案
这是一个编译器错误,这也是 Typescript 很棒的原因之一!
您的registerUser
方法的返回类型是隐含的Object
(or {}
),因为这http.post
就是返回的内容。http.post
接受一个通用参数来定义将在响应中返回的body
. 如果没有该参数,它将返回类型(因为,如果没有{}
某种定义,JSON 只是一个未知数Object
)......并且.success
{}
假设您有一个充实的响应对象,只需强烈键入它:
interface UserPostResponse {
success: boolean
}
...
registerUser(user: User): Observable<UserPostResponse> {
return this.http.post<UserPostResponse>(this.baseUri + '/register', user, { headers: this.headers });
}
相反,如果你想要它HttpRequest
本身而不是身体,你只需要告诉你HttpClient
要观察响应的哪一部分:
registerUser(user: User): Observable<HttpResponse<object>> {
return this.http.post(this.baseUri + '/register', user, { headers: this.headers }, observe: 'response');
}
...并且HttpResponse
有status
, statusText
, body
, 等等。
推荐阅读
- ibm-integration-bus - 由于从 IBM Integration Bus 工作区中删除 GeneratedBarFiles 文件夹而导致部署库时出现问题
- json - Json 将 Socket.io 解析为 HTML 表
- typo3 - 如何将新变量添加到 viewhelper (Typo3 9)
- php - 更新记录:如何检查是否有新文件上传 PHP
- react-native - 未加载反应本机自定义字体
- php - 如果它们具有不同的格式 PHP,请检查哪个日期时间较旧
- c# - Visual Studio 总是使用 Paket 重建解决方案
- python - 查找重复项并标记为变体
- spring - 在 WebFlux 中处理端点注释的控制器拦截器
- sql-server - 从任务计划程序运行时出现程序错误,但在手动运行时完成