【问题标题】:Logging POST body size using morgan when request is received收到请求时使用 morgan 记录 POST 正文大小
【发布时间】:2018-12-26 19:57:20
【问题描述】:

我正在使用“摩根”库来记录我的请求、所需时间和响应大小。

但是,对于 POST 请求,有没有一种方法可以在收到 POST 请求时记录其正文大小?

【问题讨论】:

    标签: node.js api express post morgan


    【解决方案1】:
    1. 使用 Morgan 模块中的自定义令牌格式。
    2. 为正文创建一个标记,然后将其添加到您的格式中。

    这是您需要添加到app.js 的工作示例代码 sn-p:

    morgan.token('body', (req, res) => JSON.stringify(req.body));
    app.use(morgan(':method :url :status :response-time ms - :res[content-length] :body - :req[content-length]'));
    

    【讨论】:

      【解决方案2】:

      您可以编写自己的中间件

       app.use((req, res, next) => {
          console.log(req.body);
          next();
        });
      

      您还可以检查请求是 POST 还是 PUT 等。

      if (req.method === "POST") {
             // log the budy
          }
      

      【讨论】:

        【解决方案3】:

        在浏览morgan 文档大约一个小时后,我找到了解决问题的好方法。

        可以在请求时使用morgan 库本身来完成日志记录,而不是使用morgan-body。甚至可以很容易地记录 POST 正文的长度。

        这是如何做到的:

        app.use(morgan({format: 'POST body length in bytes :req[Content-Length]', immediate: true}))
        

        这里的'format'选项定义了日志的格式,'immediate'选项在收到请求时写入日志

        【讨论】:

          【解决方案4】:

          您可以使用morgan-body,它捕获所有请求类型,无论是post还是get

          import morganBody from 'morgan-body';
          import express from 'express';
          import bodyParser from 'body-parser';
          
          const app = express();
          
          // must parse body before morganBody as body will be logged
          app.use(bodyParser.json());
          
          // hook morganBody to express app
          morganBody(app);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-27
            • 2013-07-10
            • 1970-01-01
            • 2019-07-03
            • 2017-10-13
            • 1970-01-01
            • 2017-02-05
            相关资源
            最近更新 更多