2017-11-07 17 views
0

私のAngularプロジェクトでは、別の場所にあるPouchDBドキュメントをフェッチします。そして、私はすべてのdb.get()関数の401エラーを処理したいと思います。 HTTPエラーをキャッチせずに処理する方法はありますか?PouchDBにはドキュメントを取得するためのhttpインターセプタがありますか

db.get('mydoc').then(function (doc) { 
    // handle doc 
}).catch(function (err) { 
    console.log(err); 
}); 
+0

は、なぜあなたはこのような何かをしたいんレプリケーションの参照にエラーハンドラを追加します。 ?私の答えを読んだ? – Salman

答えて

0

私は同様の状況に直面しました。

ライブレプリケーションを使用しているかどうかに応じて、2つの方法で解決できます。レプリケーションなし

  1. あなたはあなたのDB呼び出しのすべて、すなわちPouchDbServiceを処理するために角度サービスを作成し、痛みのそれより少なくするようにするにはdb.get()
  2. からcatch(err)ハンドラをアタッチする必要があり、あなたの角度コンポーネントにコンストラクタを挿入してください
  3. PouchDbServiceには、
のようなものを含める必要があります10
 
    db; // new PouchDB() reference 

    dbGet(id, opts) { 
     opts = opts || {}; 
     return db.get(id, opts) 
     .catch(err, checkIfAuthError) 
    } 

    checkIfAuthError(err) { 
     if (err && err.error) { 
     if (err.status && (err.status === 401 || err.status === 403)) { 
      return navigateToLogin(); // your logout logic, i.e. simple router, or logout service 
     } else { 
      throw(err); 
     } 
     } else { 
     return Promise.resolve(false) 
     } 
    } 
    1. 次に、あなたの角度成分(複数可)に、 PouchDbServiceを注入し、独自 .then()ロジックと dbGet()メソッドを呼び出します。 注:私の実装では、 401/403例外はスローされますので、まだそれらを処理したいかもしれません。ライブレプリケーションで
     
        pouchService.dbGet('mydoc') 
         .then(function (result) { 
         // only reach here if auth succeeded 
         // if 401/403, service would have already executed logout logic 
         }); 
    
    
    

    (簡単に)

     
        replicationRef = db.replicate.from('http://remote', opts); 
    
        replicationRef.on('error', checkIfAuthError) 
    
  • 2

    号には、あなたは401がexceptionと考えられるので、あなたの例外部分でそれを処理する必要があります。 例外ロジックで例外を処理し、コードから例外ロジックを分離することは、常に有効です。のは、あなたのコードは次のようであるとしましょう:

    db.get('mydoc').then(function (doc) { 
        //regular code 
    }).catch(function (err) { 
        //Exception logic 
    }); 
    

    あなたは例外部分のうち、例外を処理しようとした場合、それはあなたが意味をなさない通常のコードに誤りを持って帰りたいと思うことを意味し、それもです危険な。

    +0

    最初の 'then'の中でエラーを処理する方が良いですか? 「通常のコード」もエラーを発生させる可能性があるため、2番目のキャッチでPouchのエラーを受け取ることは保証されません。 – adz5A

    +0

    申し訳ありません。私はウルポイントを取得しないでください?あなたのコメントを編集し、もっと説明できますか? 'ポーチ'とは何ですか?私は文章の中で「最初のエラーの中でエラーを処理していませんか? ' – Salman

    +0

    ポーチは' PouchDB'です。つまり、db.get()。then(process、handle)とdb.get()。then(process).catch(handle)の処理エラーは同じではありません。あなたの意見では、他のものよりむしろ1つを使用する理由がありますか? – adz5A

    関連する問題