угловой универсальный + экспресс прокси - PullRequest
0 голосов
/ 07 декабря 2018

В моем проекте я использую этот шаблон для SSR в Angular 7, который использует экспресс в качестве обработчика запросов и веб-пакет 4 в качестве модуля модуля.

Мой сервер разработки работает на localhost:4000.У меня также есть сервер API на другом порту localhost:3000, поэтому мне пришлось реализовать прокси-сервер для обработки запросов с разных портов.

Я добавил этот прокси для экспресс-работы, и он отлично работает в браузере (я получил ответ от своего API, которыйнаходится на другом порту), но у меня странная ошибка в консоли ERROR [Error] каждый раз, когда я отправляю этот запрос.

Вот моя экспресс-конфигурация с прокси:

import * as express from "express";

export function createApi(distPath: string, ngSetupOptions: NgSetupOptions) {
  const api = express();

  api.set("view engine", "html");
  api.set("views", distPath);

  // Angular Express Engine
  api.engine("html", ngExpressEngine(ngSetupOptions));

  //Proxy
  const proxy = require("express-http-proxy");
  api.get("/v1/*", (req, res, next) => {
    const modifiedURL = "http://localhost:3000";
    return proxy(modifiedURL)(req, res, next);
  });

  // Server static files from distPath
  api.get("*.*", express.static(distPath));

  // All regular routes use the Universal engine
  api.get("*", (req, res) => res.render("index", { req, res }));

  return api;
}

Я думаю, что проблема можетбыть также здесь в main.server.ts:

import "zone.js/dist/zone-node";
import "reflect-metadata";

import { createServer } from "http";
import { join } from "path";

import { enableProdMode } from "@angular/core";
import { MODULE_MAP } from "@nguniversal/module-map-ngfactory-loader";
import { NgSetupOptions } from "@nguniversal/express-engine";

import { createApi } from "./api";

export { AppServerModule } from "./app/app.server.module";

export const PORT = process.env.PORT || 4000;
export const BROWSER_DIST_PATH = join(__dirname, "..", "browser");

export const getNgRenderMiddlewareOptions: () => NgSetupOptions = () => ({
  bootstrap: exports.AppServerModuleNgFactory,
  providers: [
    // Import module map for lazy loading
    {
      provide: MODULE_MAP,
      useFactory: () => exports.LAZY_MODULE_MAP,
      deps: []
    }
  ]
});

// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

let requestListener = createApi(
  BROWSER_DIST_PATH,
  getNgRenderMiddlewareOptions()
);

// Start up the Node server
const server = createServer((req, res) => {
  requestListener(req, res);
});

server.listen(PORT, () => {
  console.log(`Server listening -- http://localhost:${PORT}`);
});

// HMR on server side
if (module.hot) {
  const hmr = () => {
    const {
      AppServerModuleNgFactory
    } = require("./app/app.server.module.ngfactory");

    exports.AppServerModuleNgFactory = AppServerModuleNgFactory;

    requestListener = require("./api").createApi(
      BROWSER_DIST_PATH,
      getNgRenderMiddlewareOptions()
    );
  };

  module.hot.accept("./api", hmr);
  module.hot.accept("./app/app.server.module.ngfactory", hmr);
}

export default server;

Почему я получаю эту странную ошибку?Есть ли способ получить больше информации об этом?Ошибка появляется только при отправке запроса в API на другой порт.

...