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

jam*_*ltz 25 javascript node.js express

两者之间有区别吗?

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

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

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

ivo*_*szz 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) {});
Run Code Online (Sandbox Code Playgroud)

这通常用于限制访问或执行与/some/path路由相关的一般任务.

对于实际应用中,你可以使用这两个功能,但使用时要谨慎行为的差异app.use/some/path.不像app.get,app.use剥离/some/path从路由调用匿名函数之前.

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

  • 对Express 3来说也是如此,但Express 4处理的方式有点不同,现在它们已经接近了. (5认同)