Categorias
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