断开连接后重新连接时IonicDB无效握手

时间:2017-02-20 21:20:12

标签: android ios mobile ionic-framework ionic2

(在浏览器中使用IONIC SERVE)当用户注册我的应用程序时,会创建与数据库的连接,并插入一些初步数据及其ID。这很好用。如果您注销然后再次注册,当它再次尝试连接时会出现问题:

"Connection Failed:  Invalid handshake."

如果我退出并刷新应用程序,然后注册,那么它可以正常工作。我认为Auth或数据库提供程序中的某些东西在注销之前保留了一个值,这就是新用户连接失败的原因。我查看了chrome dev中的本地存储,当我退出时,除了“ionic_insights_session”之外的所有东西都被清除了。所以我不知道问题是什么。一些代码片段:

当用户注册时:

this.auth.signup(details).then(() => {
    this.auth.login('basic', details).then(() => {
      this.db.connect();
      this.doneLoading();
      this.navCtrl.setRoot(GuidePage, {'justSignedUp': true}, {'animate': true, 'direction': 'forward'})
    }, err => {
      this.doneLoading();
      this.showErrPopup("Check your internet connection");
    });
}

这将它们发送到指南页面,其中:

ionViewDidLoad() {
  if (this.navParams.data.justSignedUp) {
    var points = this.db.collection("points");
    points.insert({
      id: this.user.id,
      points: 9000
    });
  }
}

最后退出:

logout() {
  this.auth.logout();
  this.db.disconnect();
  this.navCtrl.setRoot(StartPage, null, {'animate': true, 'direction': 'back'});
}

如前所述,如果我注销然后刷新浏览器,它可以正常工作。任何帮助都会很棒 干杯

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,可能我们过早地调用了获取或发布数据的函数,我正在研究它。我想我们可以通过使用Promise函数来管理它。

答案 1 :(得分:0)

我认为Ionic Cloud的登录过程需要一些时间,因此我编写了一个函数来检测用户何时登录。

login() {
  let checkStatus = new Promise((resolve, reject)=>{
    Observable.interval(500).subscribe(()=>{
      if(this.auth.isAuthenticated()){ //Check every 500 ms the auth status
        resolve();
        }
      })
    });
    checkStatus.then(()=>{
       this.db.connect();
    });
}

还记得导入osservable

import {Observable} from 'rxjs/Rx';

在您的代码中,您必须调用此函数而不是this.db.connect()

答案 2 :(得分:0)

看起来IonicDB已不复存在。所以这不再是我想的问题了!