Angular Platform-Server使用自定义http状态代码进行响应

时间:2017-06-26 12:00:37

标签: angular serverside-rendering angular-universal ssr

我正在使用ExpressJS的SSR Platform-Server 我想将HTTP状态代码从200更改为404,找不到页面

我创建一个路由对象,如下所示

[
  { path: '', component: HomeComponent },
  { path: '**', component: NotFoundComponent, pathMatch: 'full' }
]

它在客户端工作正常,但我不知道在NodeJS中更改状态代码

我尝试抛出错误并在ExpressJS中处理它

所以在NotFoundComponent中,在OnInit中我抛出一个错误,但是角度捕获错误并再次得到status = 200

任何想法?

1 个答案:

答案 0 :(得分:4)

我正在使用@ nguniversal / express-engine

您可以从[快速引擎]向您的应用注入自定义提供商 并且您可以修改渲染结果 你可以处理错误

https://github.com/angular/universal/tree/master/modules/ng-express-engine

但已经注入了请求和响应

https://github.com/angular/universal/blob/master/modules/ng-express-engine/src/main.ts#L66

请求和响应是expressjs对象

所以你可以像这样使用它:

import { RESPONSE } from '@nguniversal/express-engine/tokens'

并在您的控制器或服务中

constructor(.... OtherDependencies....., @Optional() @Inject(RESPONSE) private readonly res: any) { }

和你的代码中的某个地方,如ngOnInit

if(this.res) {
    this.res.status(404)
}

如果你想停止角度

return this.res.end();

或者您可以在此处添加任何其他有效的ExpressJs res代码