API/http-request in Angular Universal 在 Docker Image 中抛出“404 not found”

API/http-request in Angular Universal throws "404 not found" in Docker Image

我有一个(外部开发的)Angular 应用程序,其中还包括 Angular Universal。该项目中已经构建了两个不同的目标/API 域(称为 api-url-1 和 api-url-2)和我添加了第三个(称为 new-api-url)。 因此我补充说:

proxy.config.json:

{
"/api-1": {
    "target": "https://api-url-1",
    "secure": false,
    "changeOrigin": true
  },
  "/api-2": {
    "target":  "https://api-url-2",
    "secure": false,
    "changeOrigin": true
  },
  "/new-api": {
    "target":  "https://new-api-url",
    "secure": false,
    "logLevel": "debug",
    "pathRewrite": { "^/new-api":  ""},
    "changeOrigin": true
  }
}

universal.interceptor.tsserver.ts中我添加了与现有[=54相同的代码行=] addressed 刚刚用自定义的名字,这样“localhost:4200/new-api/xyz”就变成了“new-api-url/xyz”.

当我在浏览器的本地主机上 运行 带有 npm start 的 Angular 项目时,这已经有效 - 一切都很好。

但现在我想从中构建一个 Docker 图像和容器 - 那里,新的 API 不工作 - 其他人可以。

我用 npm run build:ssr 构建了项目(也已经 build:ssr-deploy 尝试过使用 baseUrl ./)

Docker文件

FROM node:14.15.5-alpine3.13

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package*.json /usr/src/app/
COPY proxy.conf.json /usr/src/app/
COPY ./node_modules /usr/src/app/node_modules
COPY ./dist /usr/src/app/dist

ENV PORT=80
EXPOSE $PORT

CMD [ "npm", "run", "serve:ssr" ]

当我构建图像和 运行 容器时,原来的两个 API 工作,所以当我在浏览器中检查网络时,请求 URL 说“本地主机: 1234/api-1/xyz" 状态为 200.

但对于我添加的 API,它显示“localhost:1234/new-api/abc”,状态 404 未找到。 当我在一个新的浏览器选项卡中使用真实的 URL 而不是“localhost”测试请求并且这是有效的时,它一定是在构建过程中丢失了什么? 不幸的是,我还没有在文档中找到答案。 很高兴有人有想法,谢谢。

我发现错误: 显然我在 proxy.conf.json 中为新的 api 定义了一个“pathRewrite”,但我忘记在 server.ts 中添加相同的内容,因为我不知道这两个文件不起作用在一起。

server.ts更正:

  server.use('/api-1', createProxyMiddleware({target: proxyTarget, changeOrigin: true, logLevel: 'info'}));
  server.use('/api-2', createProxyMiddleware({target: proxyCmsTarget, changeOrigin: true, logLevel: 'info'}));
  server.use('/new-api', createProxyMiddleware({target: proxyTargetGls, changeOrigin: true, logLevel: 'debug', pathRewrite: { '^/new-api':  ''}}));