diff --git a/back/app.ts b/back/app.ts index 5b726667..ea7a9476 100644 --- a/back/app.ts +++ b/back/app.ts @@ -7,26 +7,23 @@ import { Container } from 'typedi'; import config from './config'; import Logger from './loaders/logger'; import { monitoringMiddleware } from './middlewares/monitoring'; -import { GrpcServerService } from './services/grpc'; -import { HttpServerService } from './services/http'; -import { metricsService } from './services/metrics'; +import { type GrpcServerService } from './services/grpc'; +import { type HttpServerService } from './services/http'; class Application { private app: express.Application; - private server: any; - private httpServerService: HttpServerService; - private grpcServerService: GrpcServerService; + private httpServerService?: HttpServerService; + private grpcServerService?: GrpcServerService; private isShuttingDown = false; constructor() { this.app = express(); - this.httpServerService = Container.get(HttpServerService); - this.grpcServerService = Container.get(GrpcServerService); } async start() { try { await this.initializeDatabase(); + await this.initServer(); this.setupMiddlewares(); await this.initializeServices(); this.setupGracefulShutdown(); @@ -38,6 +35,13 @@ class Application { } } + async initServer() { + const { HttpServerService } = await import('./services/http'); + const { GrpcServerService } = await import('./services/grpc'); + this.httpServerService = Container.get(HttpServerService); + this.grpcServerService = Container.get(GrpcServerService); + } + private async initializeDatabase() { await require('./loaders/db').default(); } @@ -50,16 +54,16 @@ class Application { } private async initializeServices() { - await this.grpcServerService.initialize(); + await this.grpcServerService?.initialize(); await require('./loaders/app').default({ app: this.app }); - this.server = await this.httpServerService.initialize( + const server = await this.httpServerService?.initialize( this.app, config.port, ); - await require('./loaders/server').default({ server: this.server }); + await require('./loaders/server').default({ server }); } private setupGracefulShutdown() { @@ -70,8 +74,8 @@ class Application { Logger.info('Shutting down services...'); try { await Promise.all([ - this.grpcServerService.shutdown(), - this.httpServerService.shutdown(), + this.grpcServerService?.shutdown(), + this.httpServerService?.shutdown(), ]); process.exit(0); } catch (error) { diff --git a/back/loaders/initData.ts b/back/loaders/initData.ts index 3b54a90d..31f59811 100644 --- a/back/loaders/initData.ts +++ b/back/loaders/initData.ts @@ -13,7 +13,7 @@ import { AuthDataType, SystemModel } from '../data/system'; import SystemService from '../services/system'; import UserService from '../services/user'; import { writeFile, readFile } from 'fs/promises'; -import { createRandomString, safeJSONParse } from '../config/util'; +import { createRandomString, fileExist, safeJSONParse } from '../config/util'; import OpenService from '../services/open'; import { shareStore } from '../shared/store'; import Logger from './logger'; @@ -56,8 +56,11 @@ export default async () => { password: 'admin', }; try { - const content = await readFile(config.authConfigFile, 'utf8'); - authInfo = safeJSONParse(content); + const authFileExist = await fileExist(config.authConfigFile); + if (authFileExist) { + const content = await readFile(config.authConfigFile, 'utf8'); + authInfo = safeJSONParse(content); + } } catch (error) { Logger.warn('Failed to read auth config file, using default credentials'); } diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx index 74ae3cf8..42dd1ad5 100644 --- a/src/layouts/index.tsx +++ b/src/layouts/index.tsx @@ -110,7 +110,10 @@ export default function () { } }) .catch((error) => { - history.push('/error'); + const responseStatus = error.response.status; + if (responseStatus !== 401) { + history.push('/error'); + } }) .finally(() => setInitLoading(false)); }; diff --git a/src/pages/error/index.tsx b/src/pages/error/index.tsx index 216b584c..3192f24a 100644 --- a/src/pages/error/index.tsx +++ b/src/pages/error/index.tsx @@ -36,6 +36,12 @@ const Error = () => { getHealthStatus(false); }, 3000); }) + .catch((error) => { + const responseStatus = error.response.status; + if (responseStatus === 401) { + history.push('/login'); + } + }) .finally(() => needLoading && setLoading(false)); }; @@ -74,7 +80,7 @@ const Error = () => {
{intl.get('2. 容器内执行 ql check、ql update')}
{intl.get( - '3. 如果无法解决,容器内执行 pm2 logs,拷贝执行结果' + '3. 如果无法解决,容器内执行 pm2 logs,拷贝执行结果', )} {intl.get('提交 issue')}