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

时间:2013-06-15 11:32:01

标签: javascript node.js express

之间有区别吗?

app.use('/some/path', function(req, res, next() {})

app.all('/some/path', function(req, res, next() {})

它们都是中间件函数,只能被调用/某些/路径请求,对吗?

1 个答案:

答案 0 :(得分:23)

使用这两个例子有很大的不同。向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的文档中找到更多信息。