我有一个快递应用程序服务以下路线
/login
/signup
/
/app
我希望我的骨干应用程序管理以下路由
/app/overview/:company_id/:date
/app/rooms/:company_id/:date
无论如何,express在/ app上提供基础app.jade 然后应该将导航交给骨干,但当然是拦截并给我一条未找到的路线。
我该怎么做?有人可能会复制并粘贴一个像
这样的网址/app/overview/3/2012-12-12
答案 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
这样,应用程序将正常提供,允许主干处理路由。