В моем проекте я использую этот шаблон для 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 на другой порт.