feat: 初始化项目

This commit is contained in:
richarjiang
2025-08-13 15:17:33 +08:00
commit 4f9d648a50
72 changed files with 29051 additions and 0 deletions

62
src/main.ts Normal file
View File

@@ -0,0 +1,62 @@
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe, Logger } from '@nestjs/common';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import * as bodyParser from 'body-parser';
import { createWinstonLogger } from './common/logger/winston.config';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: createWinstonLogger(),
});
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
transform: true,
forbidNonWhitelisted: true,
}),
);
app.use(bodyParser.json({ limit: '10mb' }));
app.use(bodyParser.urlencoded({ limit: '10mb', extended: true }));
app.setGlobalPrefix('api');
// 使用全局中间件记录请求日志
const logger = new Logger('HTTP');
app.use((req, res, next) => {
const startTime = Date.now();
res.on('finish', () => {
const duration = Date.now() - startTime;
const logMessage = `${req.method} ${req.originalUrl} ${res.statusCode} ${duration}ms`;
if (res.statusCode >= 400) {
logger.error(`${logMessage} - Body: ${JSON.stringify(req.body)}`);
} else {
logger.log(`${logMessage} - Body: ${JSON.stringify(req.body)}`);
}
});
next();
});
// swigger
const config = new DocumentBuilder()
.setTitle('Love Tips API')
.setDescription('Love Tips API description')
.setVersion('1.0')
.build();
const documentFactory = () => SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api/docs', app, documentFactory);
const port = process.env.PORT ?? 3000;
await app.listen(port);
const appLogger = new Logger('Bootstrap');
appLogger.log(`Server is running on port ${port}`);
appLogger.log(`Swagger documentation available at http://localhost:${port}/api/docs`);
}
bootstrap();