我已经开发了Angular Universal项目。所有页面均使用express呈现,如下所示:
server.get('*', (req, res) => {
res.render(indexHtml, { req, providers: [
{ provide: href, useValue: req.baseUrl },
{ provide: REQUEST, useValue: req },
{ provide: RESPONSE, useValue: res }
]});
});
但是,我也有一些个性化的URL,我不想渲染它们,我只希望Express响应简单的静态索引文件,该文件将被浏览器加载。我正在尝试这样:
server.get('/personal-information', express.static(indexHtml));
但没有结果。请帮助。
server.get('*', (req, res) => {
const params = req.params[0].split("/");
if (params[1] && params[1] === "personal-information") {
res.send(indexHtml);
}
else {
res.render(indexHtml, { req, providers: [
{ provide: href, useValue: req.baseUrl },
{ provide: REQUEST, useValue: req },
{ provide: RESPONSE, useValue: res }
]
}
});
使用这种方法,您可以将URL分成不同的部分,并根据需要计算逻辑。例如,如果API调用URL为https://example.com/personal-information
,则params[0]
将为example.com
,而params[1]
将为personal-information
。这将帮助您解决所面临的问题。
express.static()期望第一个参数是 目录,而不是文件名。我建议创建另一个 子目录以包含您的index.html并使用它。 Refer to this answer。
因此,如果您有类似的东西:
server.get('*.*', express.static('public'));
您需要在公共路径内创建一个名为personal-information
的文件夹,并将index.html放在此处。