标题应该很漂亮。
出于调试目的,我想表达为每个服务请求打印响应代码和正文。打印响应代码很容易,但是打印响应主体比较棘手,因为似乎响应主体不容易用作属性。
以下内容不起作用:
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);
当然,我可以轻松地在发出请求的客户端上打印响应,但是我也希望在服务器端进行打印。
PS:如果有帮助,我的所有回复都是json,但希望有一个可以与一般回复配合使用的解决方案。
不确定这是否是最简单的解决方案,但是您可以编写中间件来拦截写入响应的数据。确保禁用app.compress()。
app.compress()
function logResponseBody(req, res, next) { var oldWrite = res.write, oldEnd = res.end; var chunks = []; res.write = function (chunk) { chunks.push(chunk); return oldWrite.apply(res, arguments); }; res.end = function (chunk) { if (chunk) chunks.push(chunk); var body = Buffer.concat(chunks).toString('utf8'); console.log(req.path, body); oldEnd.apply(res, arguments); }; next(); } app.use(logResponseBody);