TECNOLOBO

No recuerdas tu codigo?
Se te olvido como se hace?

Aqui podras guardar lo que necesiten
Y cuando sea necesesario

Creado por julian gomez
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 {}