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

Manejar excep DB mongose



Descripcion

Usando mongoose y NestJs manejar excepciones

Nota1


1. Para poder crear conexiones a base de datos primero ver:
https://tecnolobo.com/editarCodigo/2468
2. Se ara uso de un servicio llamado "PokemonService" y se atrapara el error en un try-catch
						

Modulo


a
						

Servicio


import { Injectable, Body, Post, Controller, BadRequestException, InternalServerErrorException } from '@nestjs/common';
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) {
    
    
    try {
      createPokemonDto.name = createPokemonDto.name.toLowerCase();
      const pokemonNuevo =  await this.PokemonModel.create(createPokemonDto);//Si esto falla. se va por el catch    
      
      return pokemonNuevo;

    } catch (error) { 

      if(error.code=11000) {//Esto quiere decir que el registro ya existe
        throw new BadRequestException(`Pokemon con ${error.keyValue.name} Ya existe`); //Se usa BadRequestException importado de nest
      }

      throw new InternalServerErrorException(`No se puede crear el pokemon, Valida los logs`);//Se usa BadRequestException importado de nest
    }
    

  }
  
  
  async findOne(term: string) {
    let pokemon:Pokemon;
    if (!isNaN(+term)){
      pokemon = await this.PokemonModel.findOne(
        {no:term}
      );
    }

    ///Mongo id
    if(!pokemon && isValidObjectId(term)){
      pokemon = await this.PokemonModel.findById(term);
    }

    //name
    if(!pokemon) {
      pokemon = await this.PokemonModel.findOne(
        {name:term}
      );
    }

    if(!pokemon) 
    throw new NotFoundException(`El pokemon ${term} No existe`)

    return pokemon ;
  }
  

}

						

Controlador


import { Controller, Post, Body ,HttpCode } from '@nestjs/common';
import { PokemonService } from './pokemon.service';
import { CreatePokemonDto } from './dto/create-pokemon.dto';
import { UpdatePokemonDto } from './dto/update-pokemon.dto';

@Controller('pokemon')
export class PokemonController {
  constructor(private readonly pokemonService: PokemonService) {}

  @Post()
  @HttpCode(200) //Camnbiamos el codigo de exito por que lo maneja con 201 y le pusimos 200
  create(@Body() createPokemonDto: CreatePokemonDto) {    

    return this.pokemonService.create(createPokemonDto);
  }
  
  @Get(':term')
  findOne(@Param('term') term: string) {

    return this.pokemonService.findOne(term);
  }
  
}
						

Entity


a
						

App.module


a
						

Main


a
						

Vista


a