获得Backbone和Express路线很好玩

我有一个快速的应用程序服务以下路线

/login /signup / /app 

我希望我的骨干应用程序pipe理以下路线

 /app/overview/:company_id/:date /app/rooms/:company_id/:date 

反正,express在app / app上提供基础app.jade然后应该把导航交给backbone,而不是拦截并给我一条未find的path。

我该怎么做呢? 因为有人可能会复制并粘贴一个url

 /app/overview/3/2012-12-12 

可能有两个相关的问题:你正在使用推状态客户端(即使用“真实”的URL,而不是哈希片段,如/应用程序#概述),但(可能)在Backbone中没有启用推状态,不响应这些客户端路线。

使用推送状态的URL,你仍然需要处理服务器端的URL,因为用户可以使用这些直接的“客户端”URL访问你的网站(哈希片段不会发生这种情况,因为哈希部分永远不会发送到服务器)。

所以要修复服务器端的处理,express允许使用正则expression式作为路由,所以不是:

 app.get('/app', function(req, res) { // Render the app... }); 

你可以做(​​见这里 ):

 // The regexp could be a little more restrictive, obviously, but you get the point... app.get(/^\/app(\/\w+)*$/, function(req, res) { // Render the app... }); 

因此,无论哪个/ app / * URL用作Web应用程序的入口点,都会获得必要的内容。

然后,在您的Backbone初始化客户端,您应该使用Backbone.history.start({pushState: true})启动历史loggingpipe理,以便启用push状态。 看到这里 。

你可以简单地服务应用程序,保持路线不变。

 // given your app serves routes.index app.get('/app/overview/:company_id/:date', routes.index); app.get('/app/rooms/:company_id/:date', routes.index); // ... and so on 

这样的应用程序将正常服务,让骨干处理的路线。