Angular 平台服务器响应自定义 http 状态代码

Angular Platform-Server Respond with custom http status code

我正在使用带有 ExpressJS 的 SSR 平台服务器 我想将找不到页面的 HTTP 状态代码从 200 更改为 404

我创建了一个路由对象如下

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

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

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

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

有什么想法吗?

我正在使用@nguniversal/express-engine

您可以从 [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)
}

如果你想停止 angular

return this.res.end();

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

=======更新=======

这个话题很老Angular-通用变化很大。但是,这个主题仍然有效,没有变化

new Angular expessjs 的通用文档可以在这里找到 Angular Express Engine