我运行简单的Angular Universal SSR(服务器端渲染(应用程序,一切正常,服务器渲染html,但有一个问题。 静态资产,如字体、图像、图标,不会由服务器加载,而是由浏览器加载。我想做的是使用静态资产渲染 html。
我尝试了express.static()
功能,但无法使其工作。那么我怎样才能让它工作呢?
通过这里的建议让它工作。
根据本文实现 HTTP 拦截器。它将向具有相对路径的所有请求添加绝对 url,因此运行服务器的 SSR 将起作用。但是,虽然静态预渲染this.request
为空,但在这种情况下,您应该将此类请求重定向到您自己的静态服务器,例如http://localhost:3000
创建用于预渲染的 NodeJs 脚本。它将在端口 3000(与拦截器中的端口相同(上运行静态服务器,当它运行时,您可以在子进程中执行npm run prerender
。然后侦听子进程上error
和close
的事件,并在发生时关闭服务器:
const { spawn } = require('child_process');
// In static server 'listen' callback
const sp = spawn('npm', ['run', 'prerender'], { stdio: 'inherit', timeout: 5 * 60 * 1000 })
sp.on('error', (err) => {
// Pre-rendering failed.
// TODO kill subprocess, close server, end current process with error code
});
sp.on('exit', (code: number) => {
// Pre-rendering is finished
// TODO Close server
if (code !== 0) {
// Pre-rendering failed.
// TODO End current process with error code
}
})