【问题标题】:CouchDB timeout when requesting _session请求 _session 时 CouchDB 超时
【发布时间】:2017-06-08 19:28:43
【问题描述】:

我正在使用带有 PouchDB 的 Angular 4 从 CouchDB 2.0 安装中获取数据。此外,我正在使用 pouchdb-authentication 插件进行登录和注册过程。

登录和注册过程运行良好。

couchdb 向我发送超时的唯一情况是,当我以角度 (/product/:id) 将路线从 /product/1 切换到 /product/2 两次时。 在每次路由更改时,我都会发送一个从 couchdb 获取会话的请求(可能不是很智能,但它应该仍然可以工作)但是在来回 couchdb 后,我会在 10 秒后向我发送超时。这次我也无法访问 couchdb 接口。 我尝试自己发送 http 请求,而不是使用插件,但这并没有解决问题。

这是我的身份验证服务:

export class AuthGuard implements CanActivate {
    public UserDB;

    constructor(
        private router: Router,
        public appState: AppState
    ) {
        this.UserDB = new PouchDB(this.appState.get('couchdburl') + 
        '_users', {skipSetup: true});
    }

    public canActivate(route: ActivatedRouteSnapshot, state: 
         RouterStateSnapshot) {
         return this.isLoggedIn();
    }

    public isLoggedIn() {
         return this.UserDB.getSession().then((response) => {
            if ( typeof response.userCtx !== typeof undefined && response.userCtx.name !== null ) {
                return true;
            } else {
                this.router.navigate(['/login']);
                return false;
            }
        }).catch((err) => {
            console.log(err);
        });
    }

这些是我的路线:

export const ROUTES: Routes = [
  { path: '',      component: LoginComponent, pathMatch: 'full' },
  { path: 'login', component: LoginComponent},
  { path: '', component: MainComponent, children: [
    { path: 'home',  component: HomeComponent, canActivate: [AuthGuard] },
    { path: 'user-management',  component: UserManagementComponent,
    canActivate: [AuthGuard] },
    { path: 'product/:id',  component: ProjectComponent,
    canActivate: [AuthGuard] },
  ] },
  { path: '**',    component: NoContentComponent },
];

【问题讨论】:

标签: angular couchdb pouchdb


【解决方案1】:

如果您使用 PouchDB live sync API 来同步本地和远程数据库,您可能忘记在用户注销时取消实时同步。您可以查看here 以了解它是如何实现的。

如果您没有使用实时同步,则问题可能是由 PouchDB allDocs() 选项引起的。只需将timeout 选项设置为等于0 看看它是否可以解决问题。

【讨论】:

  • 我正在使用实时选项来从远程数据库中获取所有新的“更改”,但我根本没有使用复制。此外,为什么 Futon 会超时,直到我重新加载我将获得 _session 请求超时的选项卡?
  • @Sebi55 好吧,sync 只是一个双向复制。您是否在用户注销时取消 sync 处理程序?
  • 我没有像我说的那样使用复制。我需要测试 allDocs 的超时时间。从我的角度来看,这不应该让 Futon 在任何时候都超时。在我看来像一个错误。
  • @Sebi55 好的。你提到你正在使用live 选项,我以为你的意思是synclive 选项。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2020-05-31
  • 2012-03-31
  • 2018-08-17
  • 2011-11-06
相关资源
最近更新 更多