我有一个使用Node.js构建并表达的小API。我正在尝试创建一个记录器,我需要记录请求正文和响应正文。
app.use((req, res) => {
console.log(req);
res.on("finish", () => {
console.log(res);
});
});
Run Code Online (Sandbox Code Playgroud)
“表达”:“ ^ 4.16.3”,
但是,我无法在req或res对象中找到该主体。请告诉我我怎么能得到它们。谢谢。
您需要body-parser,它将在您的请求中为您创建 body 对象。
要做到这一点
npm install body-parser
var bodyParser = require('body-parser')//add this
app.use(bodyParser())//add this before any route or before using req.body
app.use((req, res) => {
console.log(req.body); // this is what you want
res.on("finish", () => {
console.log(res);
});
});
Run Code Online (Sandbox Code Playgroud)
小智 7
遇到这个问题但不喜欢解决方案。一个简单的方法是简单地用记录器包装原始的 res.send 或 res.json 。
将其作为中间件放在您的路线之前。
app.use(function responseLogger(req, res, next) {
const originalSendFunc = res.send.bind(res);
res.send = function(body) {
console.log(body); // do whatever here
return originalSendFunc(body);
};
next();
});
Run Code Online (Sandbox Code Playgroud)
https://github.com/expressjs/express/blob/master/lib/response.js
res.send 具有 function(body) { return this; 的签名 }
要res.body尝试以下代码段:
const endMiddleware = (req, res, next) => {
const defaultWrite = res.write;
const defaultEnd = res.end;
const chunks = [];
res.write = (...restArgs) => {
chunks.push(new Buffer(restArgs[0]));
defaultWrite.apply(res, restArgs);
};
res.end = (...restArgs) => {
if (restArgs[0]) {
chunks.push(new Buffer(restArgs[0]));
}
const body = Buffer.concat(chunks).toString('utf8');
console.log(body);
defaultEnd.apply(res, restArgs);
};
next();
};
app.use(endMiddleware)
// test
// HTTP GET /
res.status(200).send({ isAlive: true });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6363 次 |
| 最近记录: |