2017-07-14 1 views
0

J'essaie de définir mon propre format d'erreur à renvoyer dans la réponse. j'ai écrit mon propre middleware:Retour des erreurs avec le format d'objet d'erreur personnalisé

function catchAndLogErrors(app) { 
    return function (err, req, res, next) { 
     // stuff happening... 
     throw new Error(err.message, {name: err.name, code: err.code, className: err.className, info: err.info, data: err.data}); 
    }; 
} 

puis à /src/middleware/index.js j'ai commenté le handler et mis mon propre middleware:

const handler = require('feathers-errors/handler'); 
const catchAndLogErrors = require('my-middleware'); 
... 

app.use(catchAndLogErrors(app)); 
// app.use(handler()); 

mais je reçois l'erreur renvoyée en HTML et il est en fait seulement le message et la pile, mais aucune des autres propriétés.

Des idées?

Répondre

1

Depuis que vous avez commenté le Feathers error handler vous devrez implémenter votre propre Express error handler où vous formatez l'erreur et envoyer la réponse (au lieu de simplement le jeter) semblable à ceci (si vous voulez envoyer JSON):

function catchAndLogErrors(app) { 
    return function (err, req, res, next) { 
     res.json(err); 
    }; 
} 

Le véritable moyen de modifier les erreurs des appels de méthode de service est error hooks. Ils vous permettent de modifier hook.error à la réponse dont vous avez besoin, par ex. avec un application wide hook qui s'applique à tous les appels de service:

app.hooks({ 
    error(hook) { 
    const err = hook.error; 

    //change `hook.error` to the modified error  
    hook.error = new Error(err.message, { 
     name: err.name, 
     code: err.code, 
     className: err.className, 
     info: err.info, 
     data: err.dat 
    }); 
    } 
});