让Backbone和Express路线播放得很好

时间:2012-11-19 01:26:04

标签: node.js backbone.js express

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

/login
/signup
/
/app

我希望我的骨干应用程序管理以下路由

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

无论如何,express在/ app上提供基础app.jade 然后应该将导航交给骨干,但当然是拦截并给我一条未找到的路线。

我该怎么做?有人可能会复制并粘贴一个像

这样的网址
/app/overview/3/2012-12-12

2 个答案:

答案 0 :(得分:4)

可能有两个相关问题:你正在使用推送状态客户端(即使用“真实”URL,而不是哈希片段,如/ app#overview)但是(可能)没有启用在Backbone中推送状态,并且您的快速配置不响应那些客户端路由。

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

因此,为了修复服务器端处理,express允许使用正则表达式作为路由,而不是:

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

你可以做(​​见here):

// 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 / *网址用作您的网络应用的入口点,都会获得必要的内容。

然后在Backbone初始化客户端,您应该使用Backbone.history.start({pushState: true})启动历史记录管理,以便启用推送状态。请参阅here

答案 1 :(得分:2)

您可以直接投放应用,保持路线不受影响。

// 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

这样,应用程序将正常提供,允许主干处理路由。