这可能是一个愚蠢的问题,但是我在Express服务器上使用ember-cli
提供的Ember应用程序,但是当我尝试访问各种路由时,我的Express应用程序错误,说没有route存在(这是真的,因为我在Ember中定义了路由,而不是Express)。我该如何解决这个问题,这是正常行为吗?
我的Ember路由器:
Router.map(function() {
this.route('index', {path: '/' });
this.route('portkey');
this.route('login');
});
My Express路线只是一个不提供任何Ember路线的API,因为localhost:1234
会自动加载index.html
。
答案 0 :(得分:4)
我使用Ember路由器而不是Express路由器时遇到了问题。我所做的就是有一条快速路线(用于' /'),它显示我的Ember应用程序index.html(实际上是index.ejs)页面。不是很有希望这是 正确的做法,但它是我如何做到的,它对我有用。
首先从这开始。
app.get('/', function(req, res) {
res.render('index', {});
});
这是你的快车道。现在你的余烬路由。
App.Router.map( function() {
this.route("about", { path: "/about" });
this.route("favorites", { path: "/favorites" });
});
截至目前,您的路由结构如下所示:
yourdomain.com/ --> index.ejs displayed via express routing
/#/ --> this is the ember index route
/#/about --> this is the ember about route
/#/favorites --> this is the ember favorites route
在index.ejs文件中,你有一个基本的ember文件链接到你的ember应用程序。
现在解决你的链接问题...
如果使用ember路由器,请确保以正确的方式链接到不同的路由。 (请记住,ember路线以/#/ someroute开头)。
所以你手柄中的链接应该是这样的:
{{#link-to 'some_page'}}Go to some page{{/link}}
不会强>
<a href="some_page">Go to some page</a>
使用第二个,express将尝试处理路由,但通过使用第一个,ember正在处理路由。
因此,如果您真的想到它,您可以拥有尽可能多的ember应用程序,因为每个ember应用程序都链接到快速路由中的当前页面。
例如,在我的网站上,我使用了两条路线(显然还有一堆REST路线):login.ejs
和index.ejs
。
因此对于my site,我有以下路线:
mysite.com/
/#/
/#/budget
/#/history
/#/profile
/#/logout
mysite.com/login#/
#/register
#/forget
我希望这对你有所帮助。
修改强>
/#/
是告诉你通过路由器路由的ember的惯例。
这样想:Ember是一个单页面框架。因此,当您在ember中从一个页面链接到另一个页面时,您不会 更改页面。您只是删除dom元素并用新元素替换它们。但是如果你去服务器上的/budget
,你现在要进入一个全新的页面,而不仅仅是ember应用程序的/#/budget
部分。
我认为你只是混淆了ember路由器的真正含义。
答案 1 :(得分:0)
当我尝试直接访问除了index.html之外的Ember项目的任何部分时,我遇到了类似的问题。从那里我可以轻松地导航到我想要的位置,但这意味着为某人提供链接或刷新页面会失败。
示例:/accounts
会失败。
/#/accounts
会成功重定向到/accounts
,但刷新仍然无效。
解决方案:
Router.map(function() {
this.route('accounts');
});
Router.reopen({
location: 'hash'
});
现在我的所有链接都以#为前缀,例如/#/accounts
,刷新和直接链接按预期工作。