处理400后运行时错误

时间:2017-04-10 09:33:25

标签: javascript angular typescript ionic2

情境:

使用WebApi 2令牌身份验证对用户名和密码进行身份验证。如果凭据正确,则返回令牌。但是,如果凭据不正确,则返回400错误请求。在我的Ionic 2项目中,如果我收到回复,我会导航到下一页。如果我收到错误,我会显示自定义错误消息。

问题:

我面临的问题是,如果我第一次输入错误的凭据,则会显示自定义错误消息。如果我再次输入错误的凭据,则会显示自定义错误消息以及离子错误消息。

这是我的代码:

login.ts

  doLogin() {
    if (this.Username !== undefined && this.Password !== undefined) {
      this.loading.present();
      this.authSrv.login(this.Username, this.Password).subscribe(data => {
        this.navCtrl.setRoot('HomePage');
        this.loading.dismiss();
      }, (err) => {
        this.errorMsg("Invalid Username/Password !" + err);
        this.loading.dismiss();
      });
    }
    else
      this.errorMsg("Please enter Username/Password");
  }

AUTH-service.ts

  login(username, password) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('username', username);
    urlSearchParams.append('password', password);
    urlSearchParams.append('grant_type', 'password');
    let body = urlSearchParams.toString()
    return this.http.post('http://' + this._api + '/postoken', body, { headers: headers }
    )
      .map(res => res.json())
      .map((res) => {
        if (res !== null) {
          localStorage.setItem('acess_token', res["access_token"]);
          localStorage.setItem('access_type', res["access_type"]);
          localStorage.setItem('expires_in', res["expires_in"]);
          this.loggedIn = true;
        }
        return res;
      });
  }

截屏:

enter image description here

错误

enter image description here

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:3)

LoadingController只能调用一次。

  

请注意,在组件被解除后,它将不再可用,并且必须创建另一个组件。

这导致异常。 您应该在doLogin每次创建新加载。

doLogin() {
    if (this.Username !== undefined && this.Password !== undefined) {
      this.loading = this.loadingCtrl.create({ //create here
    content: 'Please wait...'
     });
      this.loading.present();
      this.authSrv.login(this.Username, this.Password).subscribe(data => {
        this.navCtrl.setRoot('HomePage');
        this.loading.dismiss();
      }, (err) => {
        this.errorMsg("Invalid Username/Password !" + err);
        this.loading.dismiss();
      });
    }
    else
      this.errorMsg("Please enter Username/Password");
  }