Javascript 主干路由器:去掉URL中的#

Javascript 主干路由器:去掉URL中的#,javascript,node.js,backbone.js,express,Javascript,Node.js,Backbone.js,Express,我正在让主干路由器工作 App.Router = Backbone.Router.extend({ routes: { "todo": "todo" }, todo: function() { alert(1); } }); Backbone.history.start(); 当我转到url:domain:port/#/todo 我希望这在URL中没有#的情况下工作,我尝试按照文档中提到的那样放置pushState

我正在让主干路由器工作

App.Router = Backbone.Router.extend({
      routes: {
        "todo": "todo"
      },
      todo: function() {
        alert(1);
      }
});
Backbone.history.start();
当我转到url:domain:port/#/todo

我希望这在URL中没有#的情况下工作,我尝试按照文档中提到的那样放置pushState参数

    Backbone.history.start({pushState: true});
这只是将#url重定向到非散列url

域:端口/#/todo(重定向到==>)域:端口/todo

但是当我直接访问这个URL时

域:端口/todo

它不起作用:“无法获取/待办事项”


有没有办法,我可以让这个URL在没有#的情况下工作?

您需要编写服务器端代码来传递URL页面

使用
pushState
只会告诉浏览器“我已经使用JS更改了页面的内容,以便它与您请求此URL时得到的内容相匹配”


它不会导致内容与该URL匹配,您必须将其作为一项单独的任务来完成。

Quentin绝对正确。下面是一系列使用PushState的教程。不过,这是一个警告。如果你只是在玩ToDo应用程序,那么我假设你是一个骨干新手。这是相当先进的东西@升华-不,当“您使用JS更改页面内容”时,您会收到警告,如果直接访问URL,您还没有编写服务器端代码来提供相同的结果。它将是一个单页应用程序,因此,我真的很困惑服务器应该交付什么内容?如果您以默认状态加载应用程序,然后执行导致您将URL更改为服务器请求的URL的操作,它应该以该应用程序的状态交付应用程序。下面是我所做的,我更改了::app.get(“/”,send html file);获取('*',发送html文件);但是现在在发送这个html文件时,我收到一个错误,它是:uncaughtsyntaxerror:uncontainedtoken<(在html文件的开头)app.get('*',function(req,res){res.sendfile('./views/index.html');});