有没有区别
app.use('/some/path', function(req, res, next() {})
和
app.all('/some/path', function(req, res, next() {})
它们都是只为 /some/path 请求调用的中间件函数,对吗?
有没有区别
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
with时的行为差异/some/path
。与 不同的是app.get
,在调用匿名函数之前从路由中app.use
剥离。/some/path
您可以在express的文档中找到更多信息。