两者之间有区别吗
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的文档中找到更多信息。

09-27 16:40