Categorias
iiiiii
Conectar Nest a Mongodb
Descripcion
Copnectar nest con base de datos Mongo
Nota1
1. Documentacion:
https://docs.nestjs.com/techniques/mongodb
2. INSTALAMOS paquete de node para conectarme con mogno
npm i @nestjs/mongoose mongoose
yarn add @nestjs/mongoose mongoose
3. Creamos una ENTIDAD con nombre Pokemon para decirle a mongo como se veran nuestros daots
y creamos una constante PokemonSchema la cual se va usar para exportar la entidad usada para hacer
para crear el esquema y consultar en la base de datos.
4. Importamos mongoos en el APP.MODULE el modulo "MongooseModule.forFeature" y le decimos a nuestra app
que esquema se va crear haciendo uso de la nueva entidad creada.
6. Creamos un nuevo SERVICIO "PokemonService" usando los decoradores @Injectable(),@InjectModel para
inyectar el modelo al servicio y poder usarlo. y se implementa llamando a " this.PokemonModel.create" pasando como Json los parametros
5. Creamos un controlador "PokemonController" para menejar la peticion POST para crear un nuevo registro
6. corremos el proyecto
yarn start:dev o npm start:dev
Modulo
//MODULO
//--Modulo donde se va usar
import { Module } from '@nestjs/common';
import { PokemonService } from './pokemon.service';
import { PokemonController } from './pokemon.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { Pokemon, PokemonSchema } from './entities/pokemon.entity';
@Module({
controllers: [PokemonController],
providers: [PokemonService],
imports:[ --Se importa MongooseModule.forFeature pasandole el nombre del equema y la instancia como tal del esquema que se creo
MongooseModule.forFeature([
{
name:Pokemon.name,
schema: PokemonSchema,
}
])
]
})
export class PokemonModule {}
Servicio
import { Injectable, Body, Post, Controller } from '@nestjs/common';
import { CreatePokemonDto } from './dto/create-pokemon.dto';
import { UpdatePokemonDto } from './dto/update-pokemon.dto';
import { InjectModel } from '@nestjs/mongoose/dist/common';
import { Model } from 'mongoose';
import { Pokemon } from './entities/pokemon.entity';
@Injectable()
export class PokemonService {
constructor(
@InjectModel(Pokemon.name)
private readonly PokemonModel:Model<Pokemon>){
}
async create( createPokemonDto: CreatePokemonDto) {
createPokemonDto.name = createPokemonDto.name.toLowerCase();
const pokemonNuevo = await this.PokemonModel.create(createPokemonDto);
return pokemonNuevo;
}
}
Controlador
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { PokemonService } from './pokemon.service';
@Controller('pokemon')
export class PokemonController {
constructor(private readonly pokemonService: PokemonService) {}
@Post()
create(@Body() createPokemon) {
//Llamamos el servicio para crear un nuevo registro
return this.pokemonService.create(createPokemonDto);
}
}
Entity
NOTA o plus:
--Entity para crear el esquema desde nest
import { Document } from "mongoose"; //Se tiene que importar de mongoose
import { Schema } from "@nestjs/mongoose/dist/decorators"; //uso de decorador Para Decirle a nest que esto se va usar como scheme
@Schema
export class Pokemon extends Document { //Cuando mi clase Pokemon se extiende de Doicument nos da clases metodos para poder consultar en DB
@Prop({
unique:true,
index:true
})
name:string;
@Prop({
unique:true,
index:true
})
no:number;
}
//exportamos la nueva constante que fue creado con la clase Pokemon
export const PokemonSchema = SchemaFactory.createForClass(Pokemon);
App.module
//App.module
import { join } from 'path';
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';//Aqui esta el paquete de mongosse
@Module({
imports: [
MongooseModule.forRoot(
'mongodb://localhost:27017/NombreBaseDatos',//Aqui se manda como parametro la url de conection
{dbName:'PokemonDb'}//Aqui creamos la base de datos en caso que el la URL no venga
)
],
controllers: [],
providers: [],
})
export class AppModule {}