Angular 5 Routing - 通过在地址栏中键入URL导航到路由返回Handler for Request not found(404)

时间:2017-12-06 12:08:54

标签: angular-routing angular5

我使用Angular 5与服务栈后端通信。

我可以通过输入根地址加载我的主页:http://127.0.0.1:8088然后我可以使用相关链接导航到我定义的所有路线。

但是,如果我尝试手动输入路线,即http://127.0.0.1:8088/homehttp://127.0.0.1:8088/searcharchive,我会:

  

未找到请求处理程序(404):

     

Request.HttpMethod:GET

     

Request.PathInfo:/ home

     

Request.QueryString:Request.RawUrl:/ home

我的路由代码如下:

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'searcharchive', component: SearchArchiveComponent },
  {path: '', redirectTo: 'home', pathMatch: 'full'},
  {path: '**', component: PageNotFoundComponent}    
];

@NgModule({
 imports: [RouterModule.forRoot(routes)],

  exports: [RouterModule]
})

HTML模板是:

 <nav>
   <a [routerLink]="['/home']">Home</a>
   <br/>
   <a [routerLink]="['/searcharchive']">Search Archive</a> 
   <br>
   <div class="container-admin-nav">
     <a [routerLink]="['/admin']">Admin Module</a>
   </div>
 </nav>

这引起了真正的麻烦,因为我不仅无法使用地址栏导航我甚至无法做简单的事情,如添加图像,因为无论我放置图像的位置都无法显示。在查看开发人员工具时,我得到GET http://127.0.0.1:8088/logoTransparent.png 404(未找到)所以我只能猜测路由是(再一次)妨碍某些方式。

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,因为我在使用

代理配置。

Angular应用是我的前端,而我有一个 SpringBoot 应用作为后端。

在我的proxy.config.json file中,我有以下内容:

{
"/**": { <-- **marked line**
  "target": {
    "host": "localhost",
    "protocol": "http:",
    "port": 8080
  },
  "secure": false,
  "logLevel": "debug"
  }
}

因此,每当我在地址栏中输入任何一条路由时,由于有标记的行,它将被重新路由到我的SpringBoot应用程序中……而我不希望那样。我只是希望将服务中的后端请求重新路由到后端。

解决方案:

我在所有我的服务中向我的后端请求中添加了/api,然后在proxy.config.json中从网址中删除了/api。为此,我刚刚将"pathRewrite": { "^/api": "" },添加到了proxy.config.json中,现在看起来像这样:

{
"/api/**": {
  "target": {
    "host": "localhost",
    "protocol": "http:",
    "port": 8080
  },
  "pathRewrite": {
    "^/api": ""
  },
  "secure": false,
  "logLevel": "debug"
  }
}