Angular 4 + 如果发现任何无效内容,通用重定向到 404 页面 Url
Angular 4 + Universal Redirect to 404 page if found any invalid Url
我正在为我的应用程序使用 Angular 4 + universal,如果发现某些未知的 URL,则使用以下代码重定向到 404 页面。
{
path: '',
component: FullLayoutComponent,
data: {
title: 'Home'
},
children: [
{
path: '',
loadChildren: 'app/core/components/static/static.module#StaticModule'
},
{
path: 'move',
loadChildren: 'app/core/components/move/move.module#MoveModule'
},
{
path: 'account',
loadChildren: 'app/core/components/account/account.module#AccountModule'
},
{ path: "**",redirectTo:"404"}
]
}
它重定向到 localhost:4200/404 对于任何未知 URL 但是如果我去 URL localhost:4200 那么它也会将我重定向到 404 .
任何线索肯定会有很大帮助。
谢谢
将您的代码更改为如下 -:
{
path: '',
component: FullLayoutComponent,
data: {
title: 'Home'
},
children: [
{
path: '',
loadChildren:'app/core/components/static/static.module#StaticModule'
},
{
path: 'move',
loadChildren: 'app/core/components/move/move.module#MoveModule'
},
{
path: 'account',
loadChildren: 'app/core/components/account/account.module#AccountModule'
}
]
},
{ path: "**",redirectTo:"404"}
由于到目前为止的答案中缺少最重要的部分:您不仅应该进行重定向,还应该设置正确的状态代码。为此,您需要 Angular 代码中的请求对象。然后您可以访问通常附加到请求的响应对象 - 至少在 express 中是这样。
export class NotFoundComponent implements OnInit {
constructor(@Inject(PLATFORM_ID) private platformId: Object,
@Optional() @Inject(RESPONSE) private response: Response) {
}
ngOnInit() {
if (!isPlatformBrowser(this.platformId)) {
this.response.status(404);
}
}
}
如果您使用的是 express 和 ng 通用 express 引擎,您可以像这样将请求和响应传递到依赖注入中:
app.engine('html', (_, options, callback) => {
renderModuleFactory(AppServerModuleNgFactory, {
// Our index.html
document: template,
url: options.req.url,
extraProviders: [
// make req and response accessible when angular app runs on server
<ValueProvider>{
provide: REQUEST,
useValue: options.req
},
<ValueProvider>{
provide: RESPONSE,
useValue: options.req.res,
},
]
}).then(html => {
callback(null, html);
});
})
由于我自己偶然发现了这个问题,所以我将我的过程记录在博客中post。如果您需要更多指导,请查看:
https://blog.thecodecampus.de/angular-universal-handle-404-set-status-codes/
我正在为我的应用程序使用 Angular 4 + universal,如果发现某些未知的 URL,则使用以下代码重定向到 404 页面。
{
path: '',
component: FullLayoutComponent,
data: {
title: 'Home'
},
children: [
{
path: '',
loadChildren: 'app/core/components/static/static.module#StaticModule'
},
{
path: 'move',
loadChildren: 'app/core/components/move/move.module#MoveModule'
},
{
path: 'account',
loadChildren: 'app/core/components/account/account.module#AccountModule'
},
{ path: "**",redirectTo:"404"}
]
}
它重定向到 localhost:4200/404 对于任何未知 URL 但是如果我去 URL localhost:4200 那么它也会将我重定向到 404 .
任何线索肯定会有很大帮助。
谢谢
将您的代码更改为如下 -:
{
path: '',
component: FullLayoutComponent,
data: {
title: 'Home'
},
children: [
{
path: '',
loadChildren:'app/core/components/static/static.module#StaticModule'
},
{
path: 'move',
loadChildren: 'app/core/components/move/move.module#MoveModule'
},
{
path: 'account',
loadChildren: 'app/core/components/account/account.module#AccountModule'
}
]
},
{ path: "**",redirectTo:"404"}
由于到目前为止的答案中缺少最重要的部分:您不仅应该进行重定向,还应该设置正确的状态代码。为此,您需要 Angular 代码中的请求对象。然后您可以访问通常附加到请求的响应对象 - 至少在 express 中是这样。
export class NotFoundComponent implements OnInit {
constructor(@Inject(PLATFORM_ID) private platformId: Object,
@Optional() @Inject(RESPONSE) private response: Response) {
}
ngOnInit() {
if (!isPlatformBrowser(this.platformId)) {
this.response.status(404);
}
}
}
如果您使用的是 express 和 ng 通用 express 引擎,您可以像这样将请求和响应传递到依赖注入中:
app.engine('html', (_, options, callback) => {
renderModuleFactory(AppServerModuleNgFactory, {
// Our index.html
document: template,
url: options.req.url,
extraProviders: [
// make req and response accessible when angular app runs on server
<ValueProvider>{
provide: REQUEST,
useValue: options.req
},
<ValueProvider>{
provide: RESPONSE,
useValue: options.req.res,
},
]
}).then(html => {
callback(null, html);
});
})
由于我自己偶然发现了这个问题,所以我将我的过程记录在博客中post。如果您需要更多指导,请查看:
https://blog.thecodecampus.de/angular-universal-handle-404-set-status-codes/