express journalisation corps de la réponse
Le titre devrait être assez explanetory.
À des fins de débogage, je voudrais exprimer pour imprimer le code de réponse et le corps pour chaque demande de réparer. L'impression du code de réponse est assez facile, mais l'impression du corps de la réponse est plus délicate, car il semble que le corps de la réponse n'est pas disponible en tant que propriété.
Le code suivant ne fonctionne PAS:
var express = require('express');
var app = express();
//define custom logging format
express.logger.format('detailed', function (token, req, res) {
return req.method + ': ' + req.path + ' -> ' + res.statusCode + ': ' + res.body + '\n';
});
//register logging middleware and use custom logging format
app.use(express.logger('detailed'));
//setup routes
app.get(..... omitted ...);
//start server
app.listen(8080);
De stage, j'ai pu imprimer facilement les réponses au client qui a émis la demande, mais je préfère le faire sur le côté serveur trop.
PS: Si cela peut aider, tous mes réponses sont json, mais heureusement qu'il y a une solution qui fonctionne avec des réponses générales.
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si c'est la solution la plus simple, mais vous pouvez écrire un middleware pour intercepter les données écrites à la réponse. Assurez-vous de désactiver
app.compress()
.app.use
avant de le compresser le middleware.J'ai couru dans un problème à l'aide de l'approche proposée par Laurent. Parfois, le gros morceau est une chaîne de caractères, et donc provoque des problèmes dans l'appel à la mémoire Tampon.concat(). De toute façon, j'ai trouvé une légère modification des éléments fixes:
Vous pouvez utiliser express-winston et configurer à l'aide de:
Exemple en coffeescript:
Ci-dessus accepté de code a des problèmes avec ES6.
Utilisez le code ci-dessous
J'ai effectivement fait cette chouette petit npm pour résoudre ce problème, espérons qu'il vous plaira!
https://www.npmjs.com/package/morgan-body
J'ai trouvé la solution la plus simple à ce problème est d'ajouter un
body
propriété de la chose objet lors de l'envoi de la réponse, qui peut ensuite être consulté par l'enregistreur. - Je ajouter à mon propre espace de noms que je maintiens au req, res et objets pour éviter les conflits de noms. par exemple,J'ai une méthode utilitaire qui formate toutes les réponses à mes normalisé API/JSON réponse, afin d'ajouter ce un liner y a exposé le corps de la réponse lorsque l'enregistrement est déclenché par
onFinished
cas de res.Peut-être cela aiderait quelqu'un qui est à la recherche pour obtenir la réponse connecté
Ainsi, nous utilisons le middleware pour intercepter la requête juste avant d'être servi au client. Alors si nous sommes à l'aide de res.méthode send pour envoyer les données, substituez la méthode dans le middleware et assurez-vous de journal de la console le corps. Si vous prévoyez d'utiliser res.envoyer seule alors cela devrait fonctionner très bien, mais au cas où si vous utilisez res.fin ou res.sendFile, puis écraser ces méthodes et de ne consigner que les choses nécessaires (évidemment l'enregistrement de l'intégralité du flux d'octets du fichier ne doit jamais être connecté pour perfomance fins.
J'utilise ici pino comme l'enregistreur de données. Créé en tant que singleton service.
//LoggingResponseRouter.js
Fichier principal - Main.js
Et c'est le loggingService - loggingService.js