【问题标题】:Runtime Error after handling 400处理 400 后的运行时错误
【发布时间】:2017-09-05 06:53:49
【问题描述】:

场景:

用户名和密码使用 WebApi 2 令牌身份验证进行身份验证。如果凭据正确,则返回令牌。但是,如果凭据不正确,则会返回 400 bad request。在我的 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;
      });
  }

截图:

错误

任何建议都会有所帮助。

【问题讨论】:

    标签: javascript angular typescript ionic2


    【解决方案1】:

    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");
      }
    

    【讨论】:

    • 嘿@suraj,你怎么知道问题出在Loading 中?只是没有得到它。因为他没有在那里创建加载并在同一页面上进行多次登录?是这样吗?
    • doLogin 大概是在单击按钮时调用的,this.loading 没有被重置.. 之前已经看到了它的问题......在第一次单击时关闭this.loading 后,它没有被创建在第二次点击之前再次
    猜你喜欢
    • 2015-12-06
    • 2016-03-31
    • 2021-07-23
    • 2014-12-20
    • 1970-01-01
    • 2020-09-19
    • 2016-03-18
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多