angular 中的动态服务器端渲染 (SSR) 和客户端渲染 (CSR) 取决于请求者
Dynamic Server Side Rendering (SSR) and Client Side Rendering (CSR) in angular depending who requested
是否可以创建 Node.js 服务来根据是客户端还是服务器来呈现 angular 应用程序?
现在我只使用 SSR,我按照这个 angular documentation 来创建一个服务来呈现应用程序。
如何同时使用渲染?
请按照此 tutorial 对请求启用 user-agent 检测
TLDR:
通过npm install isbot
安装isbot包
从 server.ts
更改此行:
// All regular routes use the Universal engine
server.get('*', (req, res) => {
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
});
为此:
// All regular routes use the Universal engine
server.get('*', (req, res) => {
if (isbot(req.headers['user-agent'])) {
console.log('bot and running on SSR');
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
} else {
console.log('Running on CSR');
res.sendFile(join(distFolder, `index.html`));
}
});
是否可以创建 Node.js 服务来根据是客户端还是服务器来呈现 angular 应用程序?
现在我只使用 SSR,我按照这个 angular documentation 来创建一个服务来呈现应用程序。
如何同时使用渲染?
请按照此 tutorial 对请求启用 user-agent 检测
TLDR:
通过npm install isbot
从 server.ts
更改此行:
// All regular routes use the Universal engine
server.get('*', (req, res) => {
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
});
为此:
// All regular routes use the Universal engine
server.get('*', (req, res) => {
if (isbot(req.headers['user-agent'])) {
console.log('bot and running on SSR');
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
} else {
console.log('Running on CSR');
res.sendFile(join(distFolder, `index.html`));
}
});