Конфигурационный прокси-сервер Angular Universal server.ts для запросов API не переписывает путь перед вызовом API - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь прокси-запросы API от сервера Angular Universal Express, используя http-proxy-middleware.Но переписывание происходит после моего вызова API.

Мне нужно динамически загружать данные при загрузке представлений SSR.Но мой API находится на другом сервере, поэтому мне нужно использовать прокси.Я искал решение и нашел тот, который использует http-proxy-middleware, к сожалению, когда я применяю прокси в server.ts, пути конфигурации переписываются после того, как api уже был вызван.

// These are important and needed before anything else
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import * as express from 'express';
import * as path from 'path';
import { ngExpressEngine } from '@nguniversal/express-engine';
import { AppServerModuleNgFactory } from './dist/frontend-server/main';
import * as proxy from 'http-proxy-middleware'
const distFolder = path.join(process.cwd(), 'dist', 'frontend');
const MockBrowser = require('mock-browser').mocks.MockBrowser;
const mock = new MockBrowser();

//Angular broking universal stuff
global['navigator'] = mock.getNavigator();
global['document'] = mock.getDocument();
global['window'] = mock.getWindow();
global['location'] = mock.getLocation();
global['history'] = mock.getHistory();
global['localStorage'] = mock.getLocalStorage();
global['sessionStorage'] = mock.getSessionStorage();
Object.defineProperty(document.body.style, 'transform', {
  value: () => {
    return {
      enumerable: true,
      configurable: true
    };
  },
});

//Engine
const app = express();
app.set('view engine', 'html');
app.set('views', distFolder);
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModuleNgFactory
}));
//Proxy
var options = {
  target: 'http://localhost:8080', // target host
  pathRewrite: {
    '^/api': ''
  },
  logLevel: 'debug',
};
var apiProxy = proxy(options);
app.use('/api',apiProxy);

//Routes
app.get('*.*', express.static(distFolder));
app.get('*', (req, res) => {
  res.render('index', { req });
});

app.listen(4200, () => console.log('Running on http://localhost:4200'));
Angular is running in the development mode. Call enableProdMode() to enable the production mode.
data
[Error]
[Error]
[Error]
[HPM] Rewriting path from "/api/public/offer" to "/public/offer"
[HPM] GET /api/public/offer ~> http://localhost:8080

'data '- это момент начала моей подписки.[Ошибка], вероятно, неправильные вызовы API.А потом я получаю прокси.

Я бы хотел, чтобы все мои запросы API были прокси перед вызовом API.

...