2016-10-11 9 views
0

feathers-clientを使用してリクエスト/レスポンスインターセプタを実装しようとしています。req/resインターセプタの実装方法

この目的は、グローバルメタデータをリクエストに追加し、レスポンス本文を削除することです。さらに、レスポンスインターセプタを使用してグローバルエラーハンドラを実装したいと思います。

私はフックを見ましたが、何かエラーが発生した場合、フックは実行されません。after*

feathersclient() 
    ... 
    .configure(function() { 
     const app = this; 
     app.mixins.push(function(service) { 
     service.before(function(hook) { 
      console.log('SENT', service.path, hook); 
      return hook; 
     }); 
     service.after(function(hook) { 
      // Never fired if req produces an error 
      console.log('RECEIVE', service.path, hook); 
      return hook; 
     }); 
     }); 
    }) 

答えて

1

、残念ながら起こるエラーにフックするのに最適な方法はありません。しかし、v1.6.0のfeathers-hooksはonErrorハンドラをサポートします。エラーフック用

feathersclient() 
    ... 
    .configure(function() { 
    const app = this; 
    app.mixins.push(function(service) { 
     const mixin = {}; 

     app.methods.forEach(method => { 
     if(typeof service[method] === 'function') { 
      mixin[method] = function(... args) { 
      return this._super(... args).catch(error => { 
       // do some error handling here 
       throw error; 
      }); 
      } 
     } 
     }); 

     service.mixin(mixin); 
    }); 
    }) 
+0

リリースポスト:それまでは、あなたがあなた自身のこのようなエラーハンドラとサービスのミックスインを作成することができhttps://blog.feathersjs.com/feathers-application-and-error-hooks-7a5982e70024 – Daff

0

悲しいことに、私はそれだけモンキー・パッチ適用の送信法をによって解決することができます:あなたは正しいです

app.mixins.push(function(service) { 
     // monky patch send() to fetch errors 
     const oldSend = service.send; 
     service.send = function(...args) { 
     return oldSend.apply(service, args) 
      .catch(e => { 
      console.log('ERR', e); 
      throw e; // re-throw error 
      }); 
     }; 
    }); 
関連する問題