Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 有没有办法监视Express.js中的每个响应?_Node.js_Express - Fatal编程技术网

Node.js 有没有办法监视Express.js中的每个响应?

Node.js 有没有办法监视Express.js中的每个响应?,node.js,express,Node.js,Express,我想在express.js中创建一个中间件函数。它可以监视每个请求和响应。我创建了一个中间件,但它只能监视请求,不能监视响应 function middlewareFunc (req,res,next) { console.log(req.body , req.params , req.query); next(); } 首先,您之所以只看到请求,是因为中间件的工作方式。每件事都按一定的顺序运行一次,并且只运行一次。当中间件运行时,很可能是在响应创建之前。为了得到响应,您必须在控制器进

我想在express.js中创建一个中间件函数。它可以监视每个请求和响应。我创建了一个中间件,但它只能监视请求,不能监视响应

function middlewareFunc (req,res,next) {
  console.log(req.body , req.params , req.query);
  next();
}

首先,您之所以只看到请求,是因为中间件的工作方式。每件事都按一定的顺序运行一次,并且只运行一次。当中间件运行时,很可能是在响应创建之前。为了得到响应,您必须在控制器进行渲染或类似操作时运行代码


其次,您似乎只需要基本的日志记录。它是与库一起使用还是只与控制台日志记录一起使用。

好的,首先,您只看到请求的原因是因为中间件的工作方式。每件事都按一定的顺序运行一次,并且只运行一次。当中间件运行时,很可能是在响应创建之前。为了得到响应,您必须在控制器进行渲染或类似操作时运行代码


第二,基本的日志记录似乎是您所需要的一切。它是与库一起使用,还是只与控制台日志记录一起使用。

为此,您可以编写两个中间件

1在所有请求终结点之前

//middleware
function middlewareFunEarlier(req,res,next) {
   console.log(req.body , req.params , req.query);
   next();
}

app.use(middlewareFunEarlier);

app.get('/', function(req, res, next){
   //do something
   res.end();
});
2在所有终点之后。您必须在所有端点中使用next

app.get('/', function(req, res, next){
   //do something
   next();
});

app.use(middlewareFunLater);

//middlware

function middlewareFunLater(req, res, next){
   console.log(res);
   res.end();
}

它可以与现有的工具一起使用。

为此,您可以编写两个中间件

1在所有请求终结点之前

//middleware
function middlewareFunEarlier(req,res,next) {
   console.log(req.body , req.params , req.query);
   next();
}

app.use(middlewareFunEarlier);

app.get('/', function(req, res, next){
   //do something
   res.end();
});
2在所有终点之后。您必须在所有端点中使用next

app.get('/', function(req, res, next){
   //do something
   next();
});

app.use(middlewareFunLater);

//middlware

function middlewareFunLater(req, res, next){
   console.log(res);
   res.end();
}
可以使用现有工具解决此问题。

您应该知道functionreq中的res,res,next是类http.ServerResponse的实例。因此,可以在完成事件时收听,请参见链接:

app.use和middleware可用于before,close和finish事件的组合可用于after。

您应该知道functionreq,res,next中的res是类http.ServerResponse的实例。因此,可以在完成事件时收听,请参见链接:


app.use和middleware可用于before,close和finish事件的组合可用于after。

建议在每个端点调用next是个坏主意。只有在不处理响应时才应调用Next。@Mukesh在每个端点中不使用Next是一个主要挑战。它针对小规模应用程序的基本解决方案。@t.niese在每个请求时调用next不是一个好主意,但对于这个特定需求,日志记录或此方法都满足条件。建议在每个端点调用next是一个坏主意。只有在不处理响应时才应调用Next。@Mukesh在每个端点中不使用Next是一个主要挑战。它针对小规模应用程序的基本解决方案。@t.niese在每次请求时调用next不是一个好主意,但对于这个特定需求,日志记录或这种方法都满足条件。是的,您也可以将其假定为日志记录模块。但问题是,我不能监视每个响应。是的,您也可以假设它是日志模块。但问题是我无法监控每个响应。您想从响应中监控什么?您想从响应中监控什么?我正要写同样的内容+1你为什么要通过请求?我正要写同样的请求+1您为什么在请求后通过?