Express中间件:app.use和app.all

27

使用 app.use('/some/path', function(req, res, next() {}) 和使用 app.all('/some/path', function(req, res, next() {}) 有什么区别呢?它们都是中间件函数,仅对 /some/path 请求进行调用,对吗?


1
这是一个关于编程的内容,翻译为中文如下:app.all和app.use有什么区别? - Matt Self
这个回答解决了你的问题吗?app.all('*')和app.use('/')之间的区别 - Jakub Kukul
1个回答

25
使用这两个示例之间存在很大的区别。使用 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文档中找到更多信息。


6
这适用于 Express 3,但 Express 4 处理方式有点不同,它们现在更接近了。 - Evan Hahn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接