Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?

举报
Jerry Wang 发表于 2023/04/06 08:22:41 2023/04/06
【摘要】 Angular 应用里 server.ts 文件,下面这段代码的含义?server.get('*', (req, res) => { res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }], }); });在 Angular 应用中...

Angular 应用里 server.ts 文件,下面这段代码的含义?

server.get('*', (req, res) => {
    res.render(indexHtml, {
      req,
      providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }],
    });
  });

在这里插入图片描述

在 Angular 应用中,server.ts 文件是用于构建服务器端渲染(Server-side rendering,简称 SSR)的入口文件。该文件中的代码通常使用 Node.js 的 http 模块创建一个 HTTP 服务器,用于处理客户端请求。

在这段代码中,server.get(’*’, …) 表示当 HTTP 服务器收到任何请求时都会执行下面的回调函数。其中,res.render() 方法用于渲染 HTML 页面,并将其作为响应发送给客户端。这里的 indexHtml 是一个字符串,它是应用程序的 HTML 入口文件,在服务端渲染时需要将其填充为完整的 HTML 页面。可以通过 Node.js 的文件系统模块或者其他方式加载 HTML 入口文件。

res.render() 方法的第二个参数是一个对象,用于向 HTML 页面注入数据。在这个例子中,我们向 indexHtml 中注入了两个属性:

  • req:表示当前请求的上下文信息,包括请求的 URL、HTTP 头、HTTP 方法等。
  • providers:是一个数组,用于向 Angular 应用程序的 DI(Dependency Injection,依赖注入)系统中注入数据。在这个例子中,我们向 DI 系统中注入了一个 APP_BASE_HREF 的提供者,用于指定应用程序的根路径。req.baseUrl 表示当前请求的路径,它会作为 APP_BASE_HREF 的值被注入到 DI 系统中,从而在应用程序中可以使用 APP_BASE_HREF 依赖注入来获取当前请求的根路径。
    需要注意的是,这段代码只是 server.ts 文件中的一部分,还需要在其他地方(例如在 main.ts 中)定义 APP_BASE_HREF 的提供者。这样才能在客户端和服务端都正确地使用 APP_BASE_HREF 依赖注入。

APP_BASE_HREF 是一个 Angular 应用中用于指定应用程序根路径的常量。它通常用于在应用程序中构建 URL,例如生成导航链接或者加载资源文件。

在浏览器端,APP_BASE_HREF 的默认值为 /,即应用程序根路径为域名或者子路径。例如,如果应用程序的 URL 是 http://example.com/my-app/,那么应用程序的根路径就是 /my-app/。在这种情况下,APP_BASE_HREF 的默认值就是 /my-app/。

在服务器端渲染(Server-side rendering,简称 SSR)时,APP_BASE_HREF 的值可能需要根据当前请求的路径动态设置。例如,如果当前请求的路径为 /my-app/foo/bar,那么应用程序的根路径应该是 /my-app/,而不是 /。在这种情况下,需要将 APP_BASE_HREF 的值设置为当前请求的路径,可以通过 Node.js 的 req.baseUrl 属性获取当前请求的路径,例如:

const { APP_BASE_HREF } = require('@angular/common');
// ...
app.get('*', (req, res) => {
  const providers = [
    { provide: APP_BASE_HREF, useValue: req.baseUrl }
  ];
  // ...
});

在应用程序中,可以使用 APP_BASE_HREF 常量来构建 URL,例如:

import { APP_BASE_HREF } from '@angular/common';

// ...

@Component({ /* ... */ })
export class MyComponent {
  constructor(@Inject(APP_BASE_HREF) private readonly baseHref: string) {}

  getMyUrl() {
    // 构建基于根路径的 URL
    return `${this.baseHref}/my-url`;
  }
}

在这个例子中,MyComponent 的构造函数中通过依赖注入获取了 APP_BASE_HREF 的值,然后使用它来构建 URL。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。