app.use([path,], function [, function…])
挂载[中间件][31]方法到路径上。如果路径未指定,那么默认为”/“。
一个路由将匹配任何路径如果这个路径以这个路由设置路径后紧跟着”/“。比如:
app.use('/appale', ...)
将匹配”/apple”,”/apple/images”,”/apple/images/news”等。中间件中的
req.originalUrl
是req.baseUrl
和req.path
的组合,如下面的例子所示。
app.use('/admin', function(req, res, next) {
// GET 'http://www.example.com/admin/new'
console.log(req.originalUrl); // '/admin/new'
console.log(req.baseUrl); // '/admin'
console.log(req.path);// '/new'
});
在一个路径上挂载一个中间件之后,每当请求的路径的前缀部分匹配了这个路由路径,那么这个中间件就会被执行。
由于默认的路径为/
,中间件挂载没有指定路径,那么对于每个请求,这个中间件都会被执行。
// this middleware will be executed for every request to the app.
app.use(function(req, res, next) {
console.log('Time: %d', Date.now());
next();
});
中间件方法是顺序处理的,所以中间件包含的顺序是很重要的。
// this middleware will not allow the request to go beyond it
app.use(function(req, res, next) {
res.send('Hello World');
});
// this middleware will never reach this route
app.use('/', function(req, res) {
res.send('Welcome');
});
路径可以是代表路径的一串字符,一个路径模式,一个匹配路径的正则表达式,或者他们的一组集合。
下面是路径的简单的例子。
Type | Example |
---|---|
Path |
|
Path Pattern |
|
Regular Expression |
|
Array |
|
方法可以是一个中间件方法,一系列中间件方法,一组中间件方法或者他们的集合。由于router
和app
实现了中间件接口,你可以像使用其他任一中间件方法那样使用它们。
Usage | Example |
---|---|
单个中间件 | 你可以局部定义和挂载一个中间件。一个 router 是有效的中间件。一个 Express 程序是一个有效的中间件。
|
一系列中间件 | 对于一个相同的挂载路径,你可以挂载超过一个的中间件。
|
一组中间件 | 在逻辑上使用一个数组来组织一组中间件。如果你传递一组中间件作为第一个或者唯一的参数,接着你需要指定挂载的路径。
|
组合 | 你可以组合下面的所有方法来挂载中间件。
|
下面是一些例子,在Express
程序中使用express.static
中间件。
为程序托管位于程序目录下的public
目录下的静态资源:
// GET /style.css etc
app.use(express.static(__dirname + '/public'));
在/static
路径下挂载中间件来提供静态资源托管服务,只当请求是以/static
为前缀的时候。
// GET /static/style.css etc.
app.use('/static', express.static(express.__dirname + '/public'));
通过在设置静态资源中间件之后加载日志中间件来关闭静态资源请求的日志。
app.use(express.static(__dirname + '/public'));
app.use(logger());
托管静态资源从不同的路径,但./public
路径比其他更容易被匹配:
app.use(express.static(__dirname + '/public'));
app.use(express.static(__dirname + '/files'));
app.use(express.static(__dirname + '/uploads'));