当应用程序不在主机的根目录时,如何使Aurelia路由工作

时间:2016-02-03 17:15:58

标签: aurelia aurelia-router

我正在构建一个不会存在于网站根目录的Aurelia应用程序。它的URL将是这样的http://mycompany.com/neatoApp

我有一个看起来像这样的路线配置

{route:['','index'], name:'index',moduleId:'index' nave:true, title: 'neato app home'},
{route:['news'], name:'news',moduleId:'news' nave:true, title: 'neato app news'}

我已经配置了System.js,以便它知道/ neatoApp是baseURL并且它正确地下载了所有脚本和事物。 我的app html头部有一个<base href="/neatoApp" />元素,我使用pushState进行路由。

问题是当我导航到mycompany.com/neatoApp Aurelia报告&#39;未找到路线时:/ neatoApp&#39;

路由器有一个baseUrl属性,看起来我设置它的值并不重要,因为路由识别器不能使用它。

我真的不想将neatoApp放在我的所有路线中,原因有几个:当应用程序部署在各个地方(开发,测试等)时,基本路径会发生变化,这让人头疼。开发人员没有责任知道应用程序将在各种环境中部署的位置,而且在部署代码时更新代码以包含该基本URL的操作人员并不负责。当我在路由配置中包含neatoApp时,它使得导航行为奇怪,就像生成指向/ neatoApp / neatoApp的链接一样。

有没有人能解决这个问题?

我创建了一个用于演示此问题的plunker:http://plnkr.co/edit/HPEzClAlncvQkSzjw6ph?p=preview

2 个答案:

答案 0 :(得分:0)

检查这个plunker,看看需要做什么:

http://plnkr.co/edit/0j6vhbTf4LZw4vOLOUka?p=preview

当你在虚拟目录中执行类似于http://mywebsite/subfolder的虚拟目录时,你想在路由,样式表和config.js中的baseURL前面加上&#34; ./" ;例如:

while (*traverse)

index.html通常如下所示:

baseURL: "./"

与app.js相同,应该如下所示:

<script src="./jspm_packages/system.js"></script>
<script src="config.js"></script>

如果您要发布到网站的根目录,那么您可以删除&#34; ./"并且只需使用&#34; /&#34;虽然从技术上讲,你可以使用&#34; ./"离开路线;只需更改baseURL,它仍然可以工作。

答案 1 :(得分:0)

对于我的MVC 5应用程序,我在我的Index.cshtml中使用它:

<script src="~/jspm_packages/system.js"></script>
<script>
    System.config({ baseURL: "@Url.Content("~/")" });
</script>
<script src="~/config.js"></script>
<script>
    System.import('aurelia-bootstrapper');
</script>

并在config.js中注释掉了baseUrl。需要在第一次调用System.config()时设置BaseUrl。

System.config({
  //baseURL: "./",
  defaultJSExtensions: true,
  ...