两者之间有区别吗app.use('/some/path', function(req, res, next() {})
和app.all('/some/path', function(req, res, next() {})
它们都是仅被/some/path请求调用的中间件功能,对吗?
最佳答案
这两个示例的使用有很大的不同。用app.use
注册的函数是常规的中间件函数,并且根据它们在中间件堆栈上的位置(通常在app.configure
函数内部)的位置进行适当调用。这种类型的中间件通常放置在 app.route
之前的处,但错误处理功能除外。
另一方面,app.all
是一个路由功能(通常不称为中间件),该功能涵盖所有HTTP方法,并且仅在 app.route
中称为。如果您以前的任何路由器功能与/some/path
匹配且未调用next
回调,则不会执行app.all
,因此app.all
函数通常位于路由块的开头。
路由功能中还使用了第三种中间件,例如。app.get('/some/path', middleware1, middleware2, function(req, res, next) {});
通常用于限制访问或执行与/some/path
路由有关的常规任务。
对于实际应用,您可以同时使用这两个函数,但请注意将app.use
与/some/path
一起使用时行为上的差异。与app.get
不同,app.use
在调用匿名函数之前从路由中删除/some/path
。
您可以在express的文档中找到更多信息。