angularjshttp-errorairbrake

report $http error using airbrake in angular


I already configured airbrake to report error but it seems it doesn't report http errors. Hence I'm trying to connfigure it to do so. Here's my factory:

import AirbrakeClient from 'airbrake-js';

export let errorHttpInterceptor = ($q, CONSTANT) => {
  'use strict';

  let airbrake = new AirbrakeClient({
    projectId: CONSTANTS.AIRBRAKE_PROJECT_ID,,
    projectKey: CONSTANTS.AIRBRAKE_PROJECT_KEY
  });

  airbrake.addFilter((notice) => {
    console.log(notice);
    return notice;
  });

  return {
    requestError: (rejection) => {
      console.log(rejection);
      // do something on error
      airbrake.notify(rejection);
      return $q.reject(rejection);
    },

   responseError: (rejection) => {
     console.log(rejection);
     airbrake.notify(rejection);
     return $q.reject(rejection);
   }
  };
};

Then in the config:

let httpAuthConfig = /*@ngInject*/ $httpProvider => {
  'use strict';

  let errorHttp = $injector => { return $injector.get('errorHttpInterceptor'); };

  $httpProvider.interceptors.push(['$injector', errorHttp]);
};

It seem to work only that I get [object Object] as the error on airbrake, no additional error detail or Backtrace. Is there something else I'm missing?


Solution

  • I finally found out that the server response wasn't in the format airbrake wanted it so I passed an error message built from the response into the airbrake notifier.

    responseError: (response) => {
      console.log(response);
      airbrake.notify({
        error: {
          message: response.status + ': ' + response.data.error.general,
          name: 'HttpError: ',
          stack: ''
        }
      });
      return $q.reject(response);
    }
    

    It doesn't feel like the cleanest of solution but it sure works.