【问题标题】:Backbone routes, the application starts inside /profile?骨干路由,应用程序在 /profile 内启动?
【发布时间】:2014-05-04 02:26:41
【问题描述】:

所以在用户登录应用程序之前,我不会使用任何主干逻辑。因此,对于使用 node.js,应用程序从 localhost:3000 开始,服务器处理这部分中的路由。因此,例如在访问localhost:3000 之后,有两个选项,signuplogin,它们表示处理这个工程,一个简单的 routes.js 文件处理逻辑这些路线。 /signup, /login

那部分都是服务器端,我认为此时不需要主干.js。

最后用户成功登录到应用程序,该应用程序从/profile 开始,我在其中包含主干和我的 javascript,这里我更依赖客户端路由和逻辑,因为用户被批准玩,并且被授予访问权限。

现在在这里有点菜,但我的问题是,既然我的应用程序在 /profile 内部启动,为什么路由器会被顶起?例如,我有一个 chat 路由并调用此路由,url 不尊重尾部斜杠 localhost:3000/profile#chat 有效,但不是此 localhost:3000/profile/#chat

我读过这个Backbone.js route optional parameter 我尝试反转语法但没有运气。

这是我的路线

module.exports = Router = Marionette.AppRouter.extend({
    appRoutes: {
        ''  : 'home',
        '(/:)chat' : 'chat' // tried playing around here
    }
});

那么,既然从服务器创建的/profile 路由开始,我该如何让尾部斜杠起作用?

【问题讨论】:

    标签: javascript backbone.js url-routing


    【解决方案1】:

    Backbone 是一个完全独立于你的 node/express 后端的前端 JS 框架。就路由而言,它们不共享任何逻辑。

    使用 express 服务于 /profile 路由:

    app.get('/profile', function(req, res){
      res.render('profile', {somedata:'somevalue'}); // etc..
    });
    

    然后在前端,您的 Backbone.Router 处理从那里开始的所有路由:

    var myRouter = Backbone.Router.extend({
      routes: {
        '/' : 'profile', // Actually '/profile/
        '/chat' : 'chat' // Actually '/profile/chat
      }
    });
    

    最后,请记住在您的路由器和所有路由都已定义后调用Backbone.history.start() 以开始监控哈希更改。

    【讨论】:

    • 谢谢,我很感激,上面的例子看起来应该可以工作。我知道用“/”定义家庭/个人资料路线应该是答案,但由于某种原因它不起作用。
    • 我认为这可能是因为脚本没有被包含在内。等等,让我做一些调试。我觉得这应该可行。
    • 是的,似乎在那条路线上我的脚本和 css 出现 404 错误。 Express 肯定会混淆我的应用程序。
    • 我的脚本在js/myapp.js http 正在请求/profile/js/myapp.js
    • 好的,所以我让它工作了,但不是在聊天路线上使用尾随斜杠。当我添加'/chat': 'chat' 时,这会告诉 express 或 node 或其他任何东西在profile/js/myapp.js 获取我的文件。当'chat': 'chat' 允许/profile#chat 并适当地获取我的文件时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多