背景故事:我试图在一个中间件中调试一个我认为来自其他部分的问题。但是,我不确定。所以无论如何,我希望能够检查实际调用的是什么中间件,因为我不确定订购。
是否可以检查当前正在使用的中间件集?
我试图找到Express可能存储中间件的任何内部状态,但我无法做到。
答案 0 :(得分:3)
中间件的工作原理:
中间件通常用于在请求或响应对象到达其他中间件之前对其进行转换。
如果您关注中间件的调用顺序,请按照定义的顺序调用中间件。
实施例,
app.use(compression());
app.use(passport.initialize());
app.use(bodyParser());
app.use(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());
这是在中间件之间移动此自定义调试器的一种方法,直到找出哪一个提供错误的输出。
此外,如果要检查中间件功能,可以查看这些中间件的文档。他们非常好。
通过玩自定义中间件来检查。
答案 1 :(得分:2)
您无法查看具体内容"中间件",但您可以检查所有已注册的处理程序。
快递4:
// Routes registered on app object
app._router.stack
// Routes registered on a router object
router.stack
很好的检查/调试,对于任何以下划线开头的变量编程可能不是一个好主意。