一尘不染

表达测井响应主体

node.js

标题应该很漂亮。

出于调试目的,我想表达为每个服务请求打印响应代码和正文。打印响应代码很容易,但是打印响应主体比较棘手,因为似乎响应主体不容易用作属性。

以下内容不起作用:

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,但希望有一个可以与一般回复配合使用的解决方案。


阅读 238

收藏
2020-07-07

共1个答案

一尘不染

不确定这是否是最简单的解决方案,但是您可以编写中间件来拦截写入响应的数据。确保禁用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);
2020-07-07