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');});