如何在没有任何包或库的情况下以 Express 创建记录器中间件

Dan*_*nte 4 javascript middleware backend express morgan

我试图创建一个没有任何包或库的自定义记录器中间件,它就像保存端点、方法和状态代码响应一样简单。

当我尝试保存状态代码时遇到问题,因为我的响应尚未到达控制器。我试图了解摩根是如何做到这一点的,因为它是我使用的第一个中间件,当我的后端响应时,它会记录状态代码。

有没有一种简单的方法,而无需我修改所有后端控制器?

或者更确切地说,我如何从这个中间件访问控制器的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();
};
Run Code Online (Sandbox Code Playgroud)

Hei*_*ßen 12

在这里试试这个:

const createLog = (req, res, next) => {
  res.on("finish", function() {
    console.log(req.method, decodeURI(req.url), res.statusCode, res.statusMessage);
  });
  next();
};
Run Code Online (Sandbox Code Playgroud)