Enable backend to serve frontend (#4461)

Basic POC to have frontend served by backend
This commit is contained in:
Félix Malfait
2024-03-14 11:53:10 +01:00
committed by GitHub
parent fd06d52a13
commit 42e86c7c82
4 changed files with 50 additions and 11 deletions

View File

@ -5,10 +5,29 @@ declare global {
}
}
const getDefaultUrl = () => {
if (
window.location.hostname === 'localhost' ||
window.location.hostname === '127.0.0.1'
) {
// In development environment front and backend usually run on seperate ports
// we set the default value to localhost:3000.
// It dev context, we use env vars to overwrite it
return 'http://localhost:3000';
} else {
// Outside of localhost we assume that they run on the same port
// because the backend will serve the frontend
// It prod context, we use env-config.js + window var to ovewrite it
return `${window.location.protocol}//${window.location.hostname}${
window.location.port ? `:${window.location.port}` : ''
}`;
}
};
export const REACT_APP_SERVER_BASE_URL =
window._env_?.REACT_APP_SERVER_BASE_URL ||
process.env.REACT_APP_SERVER_BASE_URL ||
'http://localhost:3000';
getDefaultUrl();
export const REACT_APP_SERVER_AUTH_URL =
window._env_?.REACT_APP_SERVER_AUTH_URL ||

View File

@ -1,6 +1,10 @@
import { Module } from '@nestjs/common';
import { DynamicModule, Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ConfigModule } from '@nestjs/config';
import { ServeStaticModule } from '@nestjs/serve-static';
import { existsSync } from 'fs';
import { join } from 'path';
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs';
@ -26,6 +30,22 @@ import { GraphQLConfigModule } from './graphql-config/graphql-config.module';
IntegrationsModule,
CoreModule,
WorkspaceModule,
...AppModule.getConditionalModules(),
],
})
export class AppModule {}
export class AppModule {
private static getConditionalModules(): DynamicModule[] {
const modules: DynamicModule[] = [];
const frontPath = join(__dirname, '..', 'front');
if (existsSync(frontPath)) {
modules.push(
ServeStaticModule.forRoot({
rootPath: frontPath,
}),
);
}
return modules;
}
}