在Express中间件中捕获响应体

6
我将尝试编写一个小型的API记录器,作为Express中间件。该记录器从req和res中收集各种信息,然后保存一个JSON文件到磁盘中,可以在以后进行读取。
以下是我当前用于存储日志的函数。
function store(req, res, next) {
  init();

  const log = {
    request_url: req.hostname,
    request_body: req.body,
    request_method: req.method,
    request_headers: req.headers,
    api_endpoint: req.baseUrl,
    timestamp: moment().format('x')
  };

  res.on('finish', () => {
    log.response_body = res.body;
    log.response_status = res.statusCode;

    global.enoch_logs.push(log);

    fs.writeFile(`./logs/${ moment().format('x') }.json`, JSON.stringify(log), (err) => (err) ? console.log(err) : null);
  });

  next();
}

问题在于res.body始终为空。我尝试了几种不同的方法来获取响应正文,但似乎都没有起作用。
我错在哪里了?

4
res没有body属性。参考链接:https://expressjs.com/en/api.html#res - undefined
嗯,我明白了。那当响应被发送时,我该如何获取响应呢? - undefined
这里有一些你可以使用或者查看的不同包: express-interceptor, morgan-body, express-mung - undefined
1个回答

0
尝试导入 body-parser。 例如,使用 import bodyParser from "body-parser"; 导入。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到有关如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接