32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
import { NestFactory } from '@nestjs/core';
|
|
import type { NestExpressApplication } from '@nestjs/platform-express';
|
|
import { AppModule } from './app.module';
|
|
import { configureApplication } from './app.setup';
|
|
import { getServerConfig, type ServerConfig } from './config/server-config';
|
|
import { AppLogger } from './logging/app-logger';
|
|
|
|
/** 创建并配置应用,但不监听端口;启动入口和测试均通过此工厂组装服务。 */
|
|
export async function createApplication(
|
|
config: ServerConfig = getServerConfig(),
|
|
logger = new AppLogger(config.logLevel),
|
|
): Promise<NestExpressApplication> {
|
|
const app = await NestFactory.create<NestExpressApplication>(
|
|
AppModule.forRoot(config),
|
|
{
|
|
// 解析器由 configureApplication 显式安装,确保大小限制和注册顺序一致。
|
|
bodyParser: false,
|
|
logger,
|
|
// 将初始化错误交给调用方处理,不在 Nest 内部直接退出整个进程。
|
|
abortOnError: false,
|
|
},
|
|
);
|
|
try {
|
|
configureApplication(app, config, logger);
|
|
return app;
|
|
} catch (error) {
|
|
// 配置阶段失败也关闭已经建立的资源,避免测试或重复启动遗留句柄。
|
|
await app.close();
|
|
throw error;
|
|
}
|
|
}
|