Express js为什么使用路由器?
我为什么要这样做:
var router = express.Router(); router.get('/', ...)
代替
app.get('/', ...);
这两个会给我同样的结果。 如果应用程序已经是路由器,那么实例化路由器有什么意义呢?
如果你正在编写一个非常复杂的应用程序,这很有用。 例如,你可能有这样一棵树:
routes user.js post.js server.js
在user.js
和post.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);