Могу ли я предоставить разные базовые ссылки для Angular Universal SSR и клиентского рендеринга? - PullRequest
0 голосов
/ 16 мая 2019

У меня угловое универсальное приложение. Все отлично работает при запуске напрямую с узла (localhost: 4000) с помощью следующих команд: npm run build: ssr npm run serve: ssr

Для производства мне нужно подать приложение в подпуть (имя_сервера / имя приложения) вместо root. Веб-сервер Apache, и я использую proxypass следующим образом: ProxyPass "/ appname /" "http://localhost:4000/"

Теперь к проблеме: Для SSR baseref - «/», но для клиентского рендеринга baseref - «/ appname». Это означает, что либо SSR, использующий узел / экспресс в корне, либо клиент, выполняющий приложение под именем сервера / имени приложения, не может найти файлы, связанные в index.html (main.js и т. Д.)

Можно ли предоставить разные базовые ссылки для SSR и CSR?

Хак, о котором я могу подумать, это разместить SSR-приложение на «localhost: 4000 / appname»… но я не мог понять, как настроить это в моем server.ts…

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 16 мая 2019

По крайней мере, теперь у меня есть узел с запущенным SSR-приложением под тем же href

const allowed = [
  '.js',
  '.css',
  '.png',
  '.jpg',
  '.svg',
  '.woff',
  '.ttf'
];
const disallowed = [
  '.map'
]

app.get('/appname/*', (req, res) => {
  if (allowed.filter(ext => req.url.indexOf(ext) > 0).length > 0 && disallowed.filter(ext => req.url.indexOf(ext) > 0).length == 0) {
     res.sendFile(resolve(DIST_FOLDER + req.url.replace("appname/", "")));
  } else {
    res.render('index', {req})
     //res.sendFile(path.join(__dirname, 'client/dist/client/index.html'));
  }
});
...