【问题标题】:Angular Universal selective renderingAngular Universal 选择性渲染
【发布时间】:2020-06-29 11:09:03
【问题描述】:

在使用 Angular Universal 运行 Angular 应用程序时,我可以选择某些路径而不是在服务器端呈现吗?

生成的默认server.ts文件:

export function app() {
  const server = express();
  const distFolder = join(process.cwd(), 'dist/browser');
  const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';

  // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
  server.engine('html', ngExpressEngine({
    bootstrap: AppServerModule,
  }));

  server.set('view engine', 'html');
  server.set('views', distFolder);

  // TODO: implement data requests securely
  server.get('/api/**', (req, res) => {
    res.status(404).send('data requests are not yet supported');
  });

  // Serve static files from /browser
  server.get('*.*', express.static(distFolder, {
    maxAge: '1y'
  }));

  // All regular routes use the Universal engine
  server.get('*', (req, res) => {
    res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
  });

  return server;
}

我能否像在常规 ng serve 中一样为要提供的特定路径添加规则?

【问题讨论】:

  • 你是否使用了反向代理,例如 nginx 或 apache?
  • 嗨!感谢您的回答!不,我没有使用反向代理。

标签: angular server-side-rendering angular-universal


【解决方案1】:

您可以将index.html 文件直接发送给客户端以获取选定的路由

//No prerendering for /about and /contact
//Note that these routes must be defined before the '*' generic route
app.get('/contact|/about', function(req, res) {
  res.sendFile(path.join(distFolder, 'index.html'));
});

// All other regular routes use the Universal engine
server.get('*', (req, res) => {
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
 });

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2020-12-16
    • 2021-05-20
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2017-04-27
    相关资源
    最近更新 更多