27

有没有区别

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

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

它们都是只为 /some/path 请求调用的中间件函数,对吗?

4

1 回答 1

24

这两个例子的使用有很大的不同。注册的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.usewith时的行为差异/some/path。与 不同的是app.get,在调用匿名函数之前从路由中app.use剥离。/some/path

您可以在express的文档中找到更多信息。

于 2013-06-15T14:58:28.013 回答