我在NestJS应用中使用app.useStaticAssets(ui);
来存储我的SPA。该应用程序在信息亭模式下的浏览器上运行。
新的信息亭硬件有2个屏幕,正面,背面。如果我们可以创建另一个SPA并在同一NestJS应用上提供服务,那将是最简单的。
我查看了NestJS文档,试图检查源代码并搜索相关问题,使用res.sendFile(不确定资产)或在NestJS下使用express只能找到提示。
有没有办法直接在NestJS中执行此操作?
答案 0 :(得分:0)
如果您将Express用作HTTP适配器,则始终可以设置多个静态资产并为其使用不同的前缀
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useStaticAssets(join(__dirname, '..', 'public'));
app.useStaticAssets( join(__dirname, '..', 'other'), {prefix: '/other/'});
await app.listen(3000);
}
bootstrap();
在这种情况下,如果有人导航到localhost:3000
,他们将得到index.html
文件夹的public
,但是如果他们导航到localhost:3000/other
,他们将得到{{1 }} {1>文件夹中。
答案 1 :(得分:0)
当尝试使用 Jay 的回答中的代码时,它对我来说根本不起作用,因为当直接通过服务器访问时,我的 Angular 应用程序中的路由 404'd。这是因为内置的 useStaticAssets()
函数只提供它可以在给定目录中找到的文件,而不是你的 Angular 或 React 路由。
我强烈建议您查看 @nestjs/serve-static,因为它允许您像这样提供多个 SPA:
import { Module } from '@nestjs/common';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join as joinPath } from 'path';
@Module({
imports: [
ServeStaticModule.forRoot(
{
rootPath: joinPath(__dirname, '..', 'client-admin'),
serveRoot: '/admin'
},
{
rootPath: joinPath(__dirname, '..', 'client'),
}
)
]
})
export class AppModule {}
但是,在您使这项工作生效之前,您需要确保您的 SPA 配置为正确安装在这些 URL 上,否则资源(CSS/JS/等)将只是 404。例如,如果您将您的管理应用程序安装到 /admin/
,那么您的 index.html
中的所有资源文件 URL 也必须以 /admin/
为前缀。