之间有区别吗?
app.use('/some/path', function(req, res, next() {})
和
app.all('/some/path', function(req, res, next() {})
它们都是中间件函数,只能被调用/某些/路径请求,对吗?
答案 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的文档中找到更多信息。