Files
nestjs-admin/server/src/main.ts
2024-11-27 14:30:20 +08:00

82 lines
2.4 KiB
TypeScript

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger, ValidationPipe } from '@nestjs/common';
import { PrismaService } from './prisma/prisma.service';
import { ConfigService as SysConfigService } from '@/modules/system/config/config.service';
import { ConfigService } from '@nestjs/config';
import { HttpExceptionFilter } from 'src/common/http-exception.filter';
import { HttpInterceptor } from 'src/common/http.interceptor';
import { WinstonModule } from 'nest-winston';
import { transports, format } from 'winston';
import 'winston-daily-rotate-file';
async function bootstrap() {
const logFormat = format.combine(
format.timestamp(),
format.printf((info) => {
return `${info.timestamp} ${info.level} ${info.context} ${info.message}`;
}),
);
const app = await NestFactory.create(AppModule, {
logger: WinstonModule.createLogger({
transports: [
// 记录错误日志
new transports.DailyRotateFile({
filename: `logs/%DATE%/error.log`,
level: 'error',
datePattern: 'YYYY-MM-DD',
maxFiles: '30d',
format: logFormat,
}),
// logging all level
new transports.DailyRotateFile({
filename: `logs/%DATE%/combined.log`,
datePattern: 'YYYY-MM-DD',
maxFiles: '30d',
format: logFormat,
}),
// 控制台输出
new transports.Console({
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.colorize({ all: true }),
logFormat,
),
}),
],
}),
});
app.useGlobalPipes(
new ValidationPipe({
transform: true,
whitelist: true,
}),
);
// 全局异常过滤器
app.useGlobalFilters(new HttpExceptionFilter());
app.useGlobalInterceptors(new HttpInterceptor());
// prisma
const prismaService = app.get(PrismaService);
await prismaService.enableShutdownHooks(app);
// 同步配置到redis
const sysConfigService = app.get(SysConfigService);
await sysConfigService.syncConfig();
const config = app.get(ConfigService);
// 跨域
app.enableCors();
// 设置全局前缀
app.setGlobalPrefix('api');
const logger = new Logger('Server Running');
await app.listen(config.get('server.port'), '0.0.0.0', async () => {
logger.log(`Application is running on: ${await app.getUrl()}`);
});
}
bootstrap();