Angular,有没有办法 return 一个不同于 200 的 HTTP 状态代码,但仅在 API 调用响应之后?

Angular, is there a way to return a HTTP status code different than 200, but only after the API call response?

主要目标是 return 一个不同于 200 的 HTTP 状态代码,但仅在 API 调用响应之后,如果找到或找不到页面,它会通知我们。据我所知,除了使用充当服务器并可以设置状态代码的 SSR 之外,没有其他方法可以实现此目的。

如果有其他方法可以做到这一点,我们可以跳过 SSR 部分。我需要帮助将 SSR 集成到 NOT fresh install Angular 8 项目中。我编译了SSR代码,也设置了express server 运行.

我遇到的问题如下:

  1. Express 服务器仅解析主要请求(来自浏览器 URL 栏的请求)但来自 Angular 的 API 调用未通过快递服务器。为了更好地使用,我正在使用包装在服务中的 HttpClient。因此,我无法检查 API 调用的状态代码是 returning,然后将其设置为页面响应。这会影响网站的搜索引擎优化,所有页面(找到或未找到)都标记为状态 200。

  2. Express js 服务器正在提供内容时缺少 window 对象。这是预期的,但我需要 window 和文档对象,因为我们有一些 jQuery 库 运行 和 Angular。

  3. 该应用程序不再像 Angular 应用程序一样运行,每 link 点击一次页面就会重新加载

  4. 设置快速服务器以将内容提供给处理域的 Apache 服务器的正确方法是什么。代理或其他服务?

您可以尝试使用没有SSR 的简单快速服务器。 然后只需通过 express 服务器简单地提供已编译的应用程序,并通过 express 服务器对 API 进行初始调用。 之后,您可以在 Angular 加载

之前设置状态代码
"use strict";
 const express = require("express"); 
 const compression = require("compression");

 const nodeFetch = require("node-fetch");

 const _port = 4100;
 const _app_folder = 'dist/browser';

 const app = express();

 app.use(compression());

 // ---- SERVE STATIC FILES ---- //
 app.get('*.*', express.static(_app_folder, {maxAge: '1y'}));

 // ---- SERVE APLICATION PATHS ---- //
 app.all('*', function (req, res) {

    let url = 'http://example.com' + req.url;

    nodeFetch(url).then(apiRes => {


       if(apiRes.status == 404){
          res.status(404).sendFile(`/`, {root: _app_folder});
       }  else {
          res.status(200).sendFile(`/`, {root: _app_folder});
       }

     })

  });

 // ---- START UP THE NODE SERVER  ----
 app.listen(_port, function () {
   console.log("Node Express server for " + app.name + " listening on  
   http://localhost:" + _port);
 });