【问题标题】:Angular Universal: do not render some pagesAngular Universal:不渲染某些页面
【发布时间】:2020-06-05 09:40:46
【问题描述】:

我开发了一个 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,我不想预渲染,我只想快速响应简单的静态索引文件,浏览器会加载哪个。我是这样尝试的:

server.get('/personal-information', express.static(indexHtml));

但没有结果。请帮忙。

【问题讨论】:

  • 您面临的问题是什么,您得到什么回应?它是普通的而不是/personal-information config吗?
  • @PraveenThirumurugan 问题是这些页面仍在服务器端呈现,但我不希望这样

标签: angular angular-universal


【解决方案1】:

express.static() 期望第一个参数是一个路径 目录,而不是文件名。我建议创建另一个 子目录来包含您的 index.html 并使用它。 Refer to this answer.

所以如果你有类似的东西:

  server.get('*.*', express.static('public'));

您需要在您的公共路径中创建一个名为personal-information 的文件夹并将您的 index.html 放在那里。

【讨论】:

    【解决方案2】:

    您也可以在代码中像这样解析 URL。

    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。这将帮助您解决您面临的问题。

    【讨论】:

    • 它只是在屏幕上打印单词“index”
    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多