Merhaba,
Bu yazıda NestJS üzerinde MongoDB ve Swagger kullanımından bahsedeceğim.
İlk olarak bir NestJS projesi oluşturuyoruz:
nest new nest-mongo-swagger-sample
Gerekli paketleri kuruyoruz:
npm i @nestjs/mongoose mongoose @nestjs/swagger swagger-ui-express
MongoDB'yi kolaylık olması adına Docker üzerinden çalıştırıyoruz:
docker run -d -p 27017:27017 --name mongodb mongo:latest
Projede basitçe users modülü oluşturup CRUD işlemleri yapacağız. Modülü oluşturuyoruz:
nest g module users
app.module.ts dosyasını açıp MongoDB'yi ve users modülünü import ediyoruz:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';
import { UsersModule } from './users/users.module';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/test'),
UsersModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
src/users klasörü içerisine users.model.ts dosyası oluşturuyoruz:
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { ApiProperty, ApiTags } from '@nestjs/swagger';
import { Document } from 'mongoose';
export type UserDocument = User & Document;
@Schema()
@ApiTags('users')
export class User {
@Prop()
@ApiProperty()
name: string;
@Prop()
@ApiProperty()
email: string;
@Prop()
@ApiProperty()
password: string;
}
export const UserSchema = SchemaFactory.createForClass(User);
users için service dosyasını oluşturuyoruz:
nest g service users
users.service.ts:
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './users.model';
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}
create(user: User): Promise<User> {
return this.userModel.create(user);
}
findAll() {
return this.userModel.find();
}
findOne(id: string) {
return this.userModel.findById(id);
}
update(id: string, user: User) {
return this.userModel.findByIdAndUpdate(id, user);
}
remove(id: string) {
return this.userModel.findByIdAndDelete(id);
}
}
users için controller dosyasını oluşturuyoruz:
nest g controller users
users.controller.ts:
import {
Controller,
Post,
Get,
Body,
Patch,
Param,
Delete
} from '@nestjs/common';
import { User } from './users.model';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: User) {
return this.usersService.create(createUserDto);
}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: User) {
return this.usersService.update(id, updateUserDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.usersService.remove(id);
}
}
users.module.ts dosyasını açıp import işlemlerini yapıyoruz:
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { MongooseModule } from '@nestjs/mongoose';
import { User, UserSchema } from './users.model';
@Module({
imports: [
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])
],
controllers: [UsersController],
providers: [UsersService]
})
export class UsersModule {}
Son olarak main.ts dosyasını açıp Swagger'ı ayarlıyoruz:
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('Users example')
.setDescription('The users API description')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(3000);
}
bootstrap();
Projeyi ayağa kaldırıyoruz:
npm run start
http://localhost:3000/api linkine gittiğimizde bizi Swagger arayüzü karşılıyor:
Artık bu arayüz üzerinden API testlerini yapabilirsiniz.
Projenin kaynak kodlarına buradan ulaşabilirsiniz.
Umarım yararlı olmuştur.
İyi çalışmalar.
Yorumlar Henüz yorum yapılmamış
Yeni Yorum