角度8:类型'Object'上不存在属性'message'

问题描述 投票:0回答:1

我还在学习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”,而不等待点击侦听器。可以确定在为按钮计时之前没有任何响应,因此不会有任何消息

angular authentication http-post
1个回答
0
投票

这是因为您使用了没有通用参数的通用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方法(POSTGET,...)使用。

Here是证明这一点的stackblitz示例。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.