我正在使用Express和Backbone.js构建一个站点。我想在前端尽可能多地处理。
我很困惑的一件事是如何将路由请求推迟到Backbone而不是Express。我知道Backbone现在可以处理诸如'/ this / here'之类的路由,但当然Express首先解释它。
将这一切交给Backbone的最佳方式是什么?我应该在Express中创建一个处理我没有具体定义的所有内容的全局路由吗?
答案 0 :(得分:8)
不确定为什么第一个答案被接受,但这是不正确的。有两种方法可以解决这个问题。
用户抓住所有节点快速路线
app.get "*", (req, res) ->
res.render "index"
在节点快速路由中使用catch all
app.use (req, res) ->
res.render "index"
其中任何一个都应位于所有路由的末尾,以便仍然可以调用任何其他页面或API端点的get。然后,您的客户端MVC路由器将转到正确的页面。
答案 1 :(得分:0)
技巧是你的应用程序需要知道在客户端(例如使用Backbone)和服务器端(例如使用node.js / Express.js)拦截哪些路由。这是通过在URL中使用哈希('#')来完成的,这些哈希应该被Backbone捕获。不包含散列的URL将被发送到服务器。
以下是如何将路由添加到Backbone路由器对象的示例。我还添加了一个默认路由('* path'),允许Backbone捕获客户端的任何其他路径。请注意,此默认设置仅适用于包含哈希('#')的网址:
// Configure router.
var AppRouter = Backbone.Router.extend({
routes: {
'contact/add': 'addContact',
'*path': 'defaultPage'
},
addContact: function() {
$content.html('Add');
},
defaultPage: function(path) {
$content.html('Default');
},
});
// Initialize router.
var appRouter = new AppRouter();
Backbone.history.start();
相应的html链接将写为:
<a href='/#contact/add'>Add</a>
答案 2 :(得分:-1)
我可能完全错了,但express是服务器端框架,而骨干是客户端框架 只有服务器端框架负责分析传入请求和传递资源的意义上的路由。
我认为,你所指的是资源路由(来自ruby on rails world)支持inside express,也就是说,你的应用程序中的每个资源都可以在一个安静的网址上获得/posts
。
你可以比GET,POST,PUT,DELETE这个资源更好,框架会将这些类型调度到正确的业务逻辑。
backbone.js中的路由(根据我的理解)纯客户端路由,使您能够在构建完整的ajax应用程序时拥有可用的浏览器历史记录。
我希望它清楚地表明这两件事虽然名字相同但并不完全相同。