首页 > 解决方案 > 如何从 NestJS 应用程序提供 2 个 SPA

问题描述

app.useStaticAssets(ui);在 NestJS 应用程序中使用来服务我的 SPA。该应用程序在信息亭模式下的浏览器上运行。

新的信息亭硬件有 2 个屏幕,正面,背面。如果我们可以创建另一个 SPA 并在同一个 NestJS 应用程序上提供它,那将是最简单的。

我查看了 NestJS 文档,尝试检查源代码并搜索相关问题,只发现了提示,使用 res.sendFile (不确定资产)或在 NestJS 下使用 express。

有没有办法在直接 NestJS 中做到这一点?

标签: nestjs

解决方案


当尝试使用 Jay 的答案中的代码时,它根本不适合我,因为我的 Angular 应用程序中的路由在直接通过服务器访问时会出现 404 错误。这是因为内置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/,那么您的所有资源文件 URL也index.html必须加上前缀/admin/


推荐阅读