收到请求时使用摩根记录 POST 体型
Logging POST body size using morgan when request is received
我正在使用 'morgan' 库来记录我的请求、花费的时间和响应的大小。
但是,对于 POST 请求,有什么方法可以在收到请求时记录 POST 请求及其正文大小?
您可以使用 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);
在阅读 morgan 文档大约一个小时后,我找到了解决问题的好方法。
而不是在请求时使用 morgan-body, logging can can be done using the morgan 库本身。甚至 POST 正文的长度也可以很容易地记录下来。
这是如何完成的:
app.use(morgan({format: 'POST body length in bytes :req[Content-Length]', immediate: true}))
此处'format'选项定义日志格式,'immediate'选项在收到请求时写入日志
- 使用 Morgan 模块的自定义令牌格式。
- 为正文创建一个标记,然后将其添加到您的格式中。
这是您需要添加到 app.js
:
中的工作示例代码片段
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]'));
您可以编写自己的中间件
app.use((req, res, next) => {
console.log(req.body);
next();
});
您还可以检查请求是 POST 还是 PUT 等。
if (req.method === "POST") {
// log the budy
}
我正在使用 'morgan' 库来记录我的请求、花费的时间和响应的大小。
但是,对于 POST 请求,有什么方法可以在收到请求时记录 POST 请求及其正文大小?
您可以使用 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);
在阅读 morgan 文档大约一个小时后,我找到了解决问题的好方法。
而不是在请求时使用 morgan-body, logging can can be done using the morgan 库本身。甚至 POST 正文的长度也可以很容易地记录下来。
这是如何完成的:
app.use(morgan({format: 'POST body length in bytes :req[Content-Length]', immediate: true}))
此处'format'选项定义日志格式,'immediate'选项在收到请求时写入日志
- 使用 Morgan 模块的自定义令牌格式。
- 为正文创建一个标记,然后将其添加到您的格式中。
这是您需要添加到 app.js
:
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]'));
您可以编写自己的中间件
app.use((req, res, next) => {
console.log(req.body);
next();
});
您还可以检查请求是 POST 还是 PUT 等。
if (req.method === "POST") {
// log the budy
}