0

我尝试使用羽毛客户端实现请求/响应拦截器。

目的是将全局元数据添加到请求中并剥离响应正文。另外我想使用响应拦截器来实现全局错误处理程序。

我查看了钩子,但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;
        });
      });
  })
4

2 回答 2

1

您是对的,不幸的是,没有一种很好的方法可以解决发生的错误。但是,羽毛挂钩 v1.6.0 将支持onError处理程序。在此之前,您可以使用自己的错误处理程序创建一个服务 mixin,如下所示:

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);
    });
  })
于 2016-10-11T19:49:45.660 回答
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
          });
      };
    });
于 2016-10-11T15:44:03.107 回答