Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Winston/Morgan记录JSON HTTP响应_Json_Node.js_Express_Sails.js_Winston - Fatal编程技术网

如何使用Winston/Morgan记录JSON HTTP响应

如何使用Winston/Morgan记录JSON HTTP响应,json,node.js,express,sails.js,winston,Json,Node.js,Express,Sails.js,Winston,我使用Winston和Morgan在Sails.js中进行所有后端登录,我需要能够记录HTTP get请求的响应。我需要将它们记录到一个文件中。我的日志文件当前显示所有http请求,但不显示响应。我已经搜索了Morgan和Winston的所有选项,但找不到这样做的方法/选项。我只是想知道你们中是否有人对如何实现这一目标有什么建议? 谢谢 您可以为ExpressJS编写一个中间件函数,在发送响应后记录主体。以节点为基础,查看Connect(因此也是Express)如何管理响应主体(这是一个流):您

我使用Winston和Morgan在Sails.js中进行所有后端登录,我需要能够记录HTTP get请求的响应。我需要将它们记录到一个文件中。我的日志文件当前显示所有http请求,但不显示响应。我已经搜索了Morgan和Winston的所有选项,但找不到这样做的方法/选项。我只是想知道你们中是否有人对如何实现这一目标有什么建议?
谢谢

您可以为ExpressJS编写一个中间件函数,在发送响应后记录主体。以节点为基础,查看Connect(因此也是Express)如何管理响应主体(这是一个流):您可以连接到两个方法中,这两个方法写入该流以获取块,然后对它们进行concat/解码以记录它。简单的解决方案,可以使其更加健壮,但它表明了该概念的有效性

function bodyLog(req, res, next) {
  var write = res.write;
  var end = res.end;
  var chunks = [];

  res.write = function newWrite(chunk) {
    chunks.push(chunk);

    write.apply(res, arguments);
  };

  res.end = function newEnd(chunk) {
    if (chunk) { chunks.push(chunk); }

    end.apply(res, arguments);
  };

  res.once('finish', function logIt() {
    var body = Buffer.concat(chunks).toString('utf8');

    // LOG BODY
  });

  next();
}
然后在主应用程序路由器中分配任何路由之前进行设置:

app.use(bodyLog);
// assign routes

我假设您也可以将其用作Morgan中变量的赋值,但我没有研究异步变量赋值的工作原理。

您可以为ExpressJS编写一个中间件函数,在发送响应后记录主体。以节点为基础,查看Connect(因此也是Express)如何管理响应主体(这是一个流):您可以连接到两个方法中,这两个方法写入该流以获取块,然后对它们进行concat/解码以记录它。简单的解决方案,可以使其更加健壮,但它表明了该概念的有效性

function bodyLog(req, res, next) {
  var write = res.write;
  var end = res.end;
  var chunks = [];

  res.write = function newWrite(chunk) {
    chunks.push(chunk);

    write.apply(res, arguments);
  };

  res.end = function newEnd(chunk) {
    if (chunk) { chunks.push(chunk); }

    end.apply(res, arguments);
  };

  res.once('finish', function logIt() {
    var body = Buffer.concat(chunks).toString('utf8');

    // LOG BODY
  });

  next();
}
然后在主应用程序路由器中分配任何路由之前进行设置:

app.use(bodyLog);
// assign routes
我假设您也可以使用它作为Morgan中变量的赋值,但我还没有研究异步变量赋值是如何工作的