Skip to content

提供静态资源

为了提供诸如单页应用(SPA)这样的静态内容,我们可以使用 @nestjs/serve-static 包中的 ServeStaticModule

安装

首先需要安装所需的包:

bash
$ npm install --save @nestjs/serve-static

启动配置

安装完成后,我们可以将 ServeStaticModule 导入根 AppModule,并通过向 forRoot() 方法传入配置对象来进行配置。

typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'client'),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

完成上述配置后,构建你的静态站点,并将其内容放到 rootPath 属性指定的位置。

配置

ServeStaticModule 提供了多种选项来自定义其行为。 你可以设置静态应用的渲染路径、指定排除路径、启用或禁用 Cache-Control 响应头等。完整选项列表请见这里

注意

静态应用默认的 renderPath*(所有路径),模块会返回 index.html 文件作为响应。 这使你能够为 SPA 创建客户端路由。控制器中声明的路径会回退到服务端。 你可以通过设置 serveRootrenderPath 并结合其他选项来改变这一行为。 另外,Fastify 适配器实现了 serveStaticOptions.fallthrough 选项,以模拟 Express 的 fallthrough 行为。要让不存在的路由返回 index.html 而不是 404 错误,需要将其设置为 true

示例

一个可运行的示例见这里

基于 NestJS 官方文档翻译