我试图创建一个没有任何包或库的自定义记录器中间件 就像保存端点、方法和状态代码响应一样简单。
当我尝试保存状态代码时遇到问题,因为我的响应尚未到达控制器。我试图了解摩根是如何做到这一点的,因为它是我使用的第一个中间件,当我的后端响应时,它会记录状态代码。
有没有一种简单的方法,而无需我修改所有后端控制器?
或者更确切地说,我如何从这个中间件访问控制器的res.status?
const createLog = (req, res, next) => {
const { method, url } = req;
const { statusCode, statusMessage } = res;
console.log(statusCode, statusMessage); // Both null when reach the middleware
next();
};
以下中间件仅记录请求方法、URL 和状态:
const createLog = (req, res, next) => {
res.on("finish", function() {
console.log(req.method, decodeURI(req.url), res.statusCode, res.statusMessage);
});
next();
};
或者,您可以在 HTTP(S) 服务器上注册以下事件处理程序,该处理程序会记录所有 HTTP 请求 (
>
) 和响应 (<
),但这可能会太多:
server.on("connection", function(socket) {
const write = socket.write;
socket.on("data", function(chunk) {
console.log(">", chunk.toString());
});
socket.write = function(chunk, encoding, callback) {
console.log("<", chunk.toString(encoding || "utf8"));
return write.apply(this, arguments);
};
});