提供静态资源
为了提供诸如单页应用(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 创建客户端路由。控制器中声明的路径会回退到服务端。 你可以通过设置 serveRoot、renderPath 并结合其他选项来改变这一行为。 另外,Fastify 适配器实现了 serveStaticOptions.fallthrough 选项,以模拟 Express 的 fallthrough 行为。要让不存在的路由返回 index.html 而不是 404 错误,需要将其设置为 true。
示例
一个可运行的示例见这里。