使用Express.js和Backbone.js设置默认路由

使用Express.js和Backbone.js设置默认路由,backbone.js,express,Backbone.js,Express,我正在使用Express和Backbone.js构建一个站点。我想在前端处理尽可能多的事情 有一件事我很困惑,那就是如何将路由请求延迟到主干网而不是Express。我知道主干网现在可以处理诸如“/this/here”之类的路由,但Express当然会首先解释这一点 最好的办法是什么?我是否应该在Express中创建一个全局路由来处理我没有明确定义的所有内容 我可能完全错了,但是express是服务器端框架,而主干是客户端框架。 从分析传入请求和交付资源的意义上讲,只有服务器端框架负责路由 我认为

我正在使用Express和Backbone.js构建一个站点。我想在前端处理尽可能多的事情

有一件事我很困惑,那就是如何将路由请求延迟到主干网而不是Express。我知道主干网现在可以处理诸如“/this/here”之类的路由,但Express当然会首先解释这一点


最好的办法是什么?我是否应该在Express中创建一个全局路由来处理我没有明确定义的所有内容

我可能完全错了,但是express是服务器端框架,而主干是客户端框架。
从分析传入请求和交付资源的意义上讲,只有服务器端框架负责路由

我认为,您所指的是express内部的资源路由(来自RubyonRails世界)支持,也就是说,应用程序中的每个资源都可以通过RESTfulURL访问,如
/posts

您可以获取、发布、放置和删除此资源,框架将这些类型分派到正确的业务逻辑

根据我的理解,backbone.js中的路由是纯客户端路由,它使您能够在构建一个成熟的ajax应用程序时拥有一个工作的浏览器历史记录


我希望这两个东西,虽然名称相同,但并不完全相同。

诀窍在于,您的应用程序需要知道在客户端(例如使用主干网)和服务器端(例如使用node.js/Express.js)截取哪些路由。这是通过在URL中使用哈希(“#”)来完成的,该哈希用于主干网应该捕获的链接。不包含哈希的URL将被发送到服务器

下面是如何向主干路由器对象添加路由的示例。我还添加了一个默认路由('*path'),它允许主干网捕获客户端上的任何其他路径。请注意,此默认设置仅适用于包含哈希(“#”)的URL:

//配置路由器。
var AppRouter=Backbone.Router.extend({
路线:{
“联系人/添加”:“添加联系人”,
“*路径”:“defaultPage”
},
addContact:function(){
$content.html('Add');
},
defaultPage:函数(路径){
$content.html('Default');
},
});
//初始化路由器。
var appRouter=新appRouter();
Backbone.history.start();
相应的html链接将编写为:


不确定为什么第一个答案被接受,但这是不正确的。有两种方法可以解决这个问题

  • 用户在您的node express路由中使用“一网打尽”功能

    app.get "*", (req, res) ->
      res.render "index"
    
  • 在node express路线中使用“包罗万象”

    app.use (req, res) ->
      res.render "index"
    

  • 其中任何一个都应该位于所有路由的末尾,以便仍将调用页面或API端点的任何其他get。然后,您的客户端MVC路由器将转到正确的页面。

    请参阅下面的答案。您可以使用app.get“*”或app.use来传递请求,以便客户端路由器能够完成它的任务。