Express js为什么使用路由器?

我为什么要这样做:

var router = express.Router(); router.get('/', ...) 

代替

 app.get('/', ...); 

这两个会给我同样的结果。 如果应用程序已经是路由器,那么实例化路由器有什么意义呢?

如果你正在编写一个非常复杂的应用程序,这很有用。 例如,你可能有这样一棵树:

 routes user.js post.js server.js 

user.jspost.js ,你都可以创build一个Router对象并导出它。 您可以将用户的所有路由附加到该路由器 – 例如/user/new/user/edit/user/1/post/new/post/edit/post/1

server.js ,你require每个路由并通过app.use连接他们的路由器:

 app.use('/user', user); app.use('/post', post); 

所有到/user请求将被发送到用户路由器,所有到/post请求将被发送到邮件路由器。 那么,你可以注册路线如:

 router.get('/new', function(req, res) { }); 

它会自动映射到/user/new/post/new 。 这很有用,因为它有助于组织您的应用程序,并强制您将应用程序的一个部分分隔成一个文件(分离关注点和所有这些)。 这是expression的一个有用的部分,是不是很好的广告。

重访路由器中间件

路由器中间件是非常特殊的中间件。 而其他Express中间件是从Connectinheritance的,路由器是由Express本身实现的。 这个中间件全权负责使用Sinatra类路由授权Express。 路由器中间件是它自己的一个中间件系统。 路由定义形成这个堆栈中的中间件。 这意味着匹配路由可以响应HTTP响应并结束请求stream,或者将请求传递到下一个中​​间件。

接着

为了确保可预测性和稳定性,我们应该明确添加路由器到中间件堆栈

 app.use(app.router);