如何在Nest.js中提供静电Html文件?

我要提供位于Nest项目外部的/dist文件夹中的静电HTML文件。index.html加载成功,但无法加载任何JS文件(404错误)。

我有一个Node/Express.js项目,它使用

app.use('/', express.static('../client/dist'))

并且工作正常。

但是,在Nest项目中

app.setBaseViewsDir(join(__dirname, '../../client/dist'))

不起作用。

AppController我尝试了

import { Response } from 'express';

@Get()
  get(@Res() res: Response) {
    res.sendFile('index.html', {
      root: '../client/dist',
    });
  }

但没有运气。

如前所述,index.html加载成功。因此,问题不是一条错误的道路。index.html中的src路径错误也不是问题,因为在Express项目中使用的是完全相同的文件。

/dist
  |-index.html
  |-main.js
  |-etc.

在index.html:

<script type="text/javascript" src="main.js"></script>

当我将dist文件夹放入Nest项目(并调整路径)时,它也不起作用。

我找到了解决方案:

我现在使用EXPRESS模块:

import * as express from 'express';
...
app.use('/', express.static('../client/dist'));

解决方案

关于Nest.js的official documentation,应该这样服务静电文件:

安装所需的软件包:

npm install --save @nestjs/serve-static

更新app.module.ts如下所示:

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'),   // <-- path to the static files
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

相关文章