我可以为Angular Universal SSR和客户端渲染提供不同的baseref吗?

时间:2019-05-16 10:22:13

标签: node.js angular apache universal ssr

我有一个角度通用的应用程序。当直接使用以下命令从节点(localhost:4000)运行时,所有方法都可以正常工作: npm运行build:ssr npm运行serve:ssr

对于生产环境,我需要在子路径(服务器名称/应用名称)而非根目录下提供应用程序。网络服务器是apache,我使用proxypass如下: ProxyPass“ / appname /”“ http://localhost:4000/

现在出现问题: 对于SSR,baseref为“ /”,而对于客户端渲染,baseref为“ / appname”。这意味着,无论是在根上使用node / express的SSR还是在服务器名/应用名上运行该应用程序的客户端都找不到在index.html(main.js等)中链接的文件

是否可以为SSR和CSR提供不同的baseref?

我可以想到的一种破解方法是将SSR-app托管在“ localhost:4000 / appname”上……但是我不知道如何在我的server.ts中进行配置……

任何帮助,不胜感激!

1 个答案:

答案 0 :(得分:0)

至少我现在让节点在同一href下运行SSR-app

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'));
  }
});