2017-09-01 1 views
0

J'ai un serveur Express avec un gestionnaire d'erreurs simple. Tout l'objet err qui lui est passé est Error objets.Objet d'erreur lors de la récupération à partir d'Express Server

const errorHandler = (err, req, res, next) => { 
    logError(`Express Error Handler: ${err}`); 
    res.status(500).json(err); 
}; 

J'appelle les routes du serveur à l'aide request:

request 
    .post(
    { 
     uri: url, 
     timeout, 
     json: true, 
     form: { 
     currentStepUid, 
     sourceStepUid: previousStepUid, 
     config, 
     }, 
    }, 
    (error, response, body) => { 
     // Handle errors 
    } 
) 
}); 

Mon problème est que l'erreur ne sont pas à venir à travers comme error objets, mais plutôt comme une propriété error sur l'objet body.

Comment dois-je configurer Express pour récupérer les objets d'erreur?

Répondre

2

Un état 500 n'est PAS signalé par request.post() comme une erreur. Le serveur http a été contacté et une réponse a été fournie. Ce n'est pas ce qu'il considère comme une erreur. Il appartient à votre propre code de détecter cette condition à partir de la réponse http, puis de la traiter comme une erreur dans votre propre code.

Vous aurez besoin de regarder la réponse réelle pour voir le code d'état http 500. L'objet d'erreur EST le corps de la réponse http de sorte que c'est là où il devrait être. C'est là que vous devez l'obtenir.

Si vous devez faire cette même logique à plusieurs endroits, vous pouvez créer votre propre fonction de wrapper pour request.post() qui examinerait le code d'état http et si c'est dans une plage que vous considérez comme une erreur, alors obtenez le corps de réponse http et en faire une erreur.