如何检查正在使用的Express.js中间件集?

问题描述 投票:4回答:2

背景故事:我正在尝试调试一个我认为来自其他部分的中间件问题。但是,我不确定。所以无论如何,我希望能够检查实际调用的是什么中间件,因为我不确定订购。

是否可以检查当前正在使用的中间件集?

我试图找到Express可能存储中间件的任何内部状态,但我无法做到。

node.js debugging express middleware
2个回答
2
投票

您无法看到具体的“中间件”,但您可以检查所有已注册的处理程序。

在快递4中:

// Routes registered on app object
app._router.stack

// Routes registered on a router object
router.stack

很好的检查/调试,对于任何以下划线开头的变量编程可能不是一个好主意。


3
投票

中间件的工作原理:

中间件通常用于在请求或响应对象到达其他中间件之前对其进行转换。

如果您关注调用中间件的顺序,则表示按照定义的顺序调用中间件。

例,

app.use(compression());
app.use(passport.initialize());
app.use(bodyParser());
app.use(cookieParser());

订单是

  1. 压缩,
  2. 护照,
  3. 身体解析器,
  4. cookieParser

(另外我认为你的bodyParser和cookieParser中间件应该在护照等其他中间件之前)。

这就是错误处理中间件最后保留的原因,因此如果它到达它们,它们会给出错误响应。

所以基本上,请求滴落中间件,直到其中一个人说它不希望它继续下去(get,post方法是这样的中间件,停止请求)。

现在,调试部分:

您可能无法在内部正确检查中间件,但您可以通过在中间插入自己的自定义中间件来检查中间件是否正常工作,然后在其上放置断点。

假设你想要在bodyParser中间件执行任务后调试你的请求发生了什么,你可以做的就是把你的自定义中间件放在两者之间,检查请求和响应它们是否被正确修改。你如何做到这一点是通过以下示例。

例,

app.use(bodyParser());

//custom middleware to inspect which middleware is not  working properly
app.use(function(req,res,next){
   console.log("check something!"); //do something here/put a breakpoint
   next(); 
   /*this function is the third parameter 
   and need to be called by the middleware 
   to proceed the request to the  next middleware,
   if your don't write this line, your reqest will just stop here.
   app.get/app.post like methods does not call next*/
});

app.use(cookieParser());

这是在中间件之间移动此自定义调试器的一种方法,直到找出哪一个提供错误输出。

此外,如果要检查中间件功能,可以查看这些中间件的文档。他们非常好。

通过使用您的自定义中间件进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.