我还在学习Angular时,正在开发一个演示身份验证模块。 auth页面包括一个身份验证表单,一旦用户单击“登录”,它就会触发发布请求并验证响应中的消息,以检查它是否成功。问题是当我使用ng serve启动项目时出现此错误
ERROR in src/app/auth-req.service.ts(26,38): error TS2339: Property 'message' does not exist on type 'Object'.
src/app/auth-req.service.ts(27,20): error TS2339: Property 'message' does not exist on type 'Object'.
这是auth-req-service.ts文件中的代码
constructor(private authS: AuthReqService, private generalS: GeneralSService, private route: Router) {}
login(userData: {email: string, password: string}) {
this.http.post('http://localhost/apiapp/login.php', userData).pipe(catchError(
(errorRes) => {
console.log(errorRes.url);
console.log(errorRes.name);
console.log(errorRes.message);
return throwError(errorRes);
}
)).subscribe( (response) => {
this.responseMsg.next(response.message);
if (response.message === 'Logged in') {
localStorage.setItem('isLoggedIn', '1');
this.generalS.isAuthenticated.next(true);
} else {
this.generalS.isAuthenticated.next(false);
}
}, error => {
// alert(error.message);
} );
}
我单击登录按钮后调用此功能
submitForm(form: NgForm) {
let email: string = form.value.email;
let password: string = form.value.password;
let userData = {email, password};
this.authS.login(userData);
因此,为什么要在开始时检查“ response.message”,而不等待点击侦听器。可以确定在为按钮计时之前没有任何响应,因此不会有任何消息
这是因为您使用了没有通用参数的通用post
方法。要解决此问题,您应该执行以下操作:
this.http.post<any>(....) // instead of "any" you can use concrete type of "response" that you expect
这样response
不会是Object
类型,而是any
类型(或者,如果您使用的是[[concrete类型而不是any
类型),则不会。供将来参考,因为您使用的是新的HttpClientModule
(自Angular 4.3起的那个),所以应始终将带有通用参数的http方法(POST,GET,...)使用。
希望这会有所帮助。