1
resposta

Está chamando

Chamo o POST http://localhost:3000/livros/ com o JSON incompleto:

{
    "editora": "tarara"
}

Aparece:

{
    "mensagem": "Erro interno do servidor",
    "status": 500
}

E era pra aparecer

{
os seguintes erros foram encontrados: ...
}
import RequisicaoIncorreta from "./RequisicaoIncorreta.js";

class ErroValidacao extends RequisicaoIncorreta{
    constructor(erro){
        const mensagensErro = Object.values(erro.errors)
            .map(erro=> erro.message)
            .join("; ");


        super(`os seguintes erros foram encontrados: ${mensagensErro}`);
    }
}
export default ErroValidacao;
import ErroBase from "./ErroBase.js";

class RequisicaoIncorreta extends ErroBase{
    constructor(mensagem = "Um ou mais dados fornecidos estão incorretos"){
        super(mensagem, 400);
    }
}

export default RequisicaoIncorreta;
import { autor } from "../models/Autor.js";
import livro from "../models/Livro.js";

class LivroController {
    
  static async listarLivros (req, res, next){
    try{
      const listaLivros = await livro.find({});
      res.status(200).json(listaLivros);

    }catch(erro){
      next(erro);
    }
  }

  static async listarLivrosPorId (req, res, next){
    try{
      const id = req.params.id;
      const livroEncontrado = await livro.findById(id);
      res.status(200).json(livroEncontrado);

    }catch(erro){
      next(erro);
    }
  }

  static async cadastrarLivro (req, res, next){
    const novoLivro = req.body;
    try{
      const autorEncontrado = await autor.findById(novoLivro.autor);
      const livroCompleto = {...novoLivro, autor: { ...autorEncontrado._doc}};
      const livroCriado = await livro.create(livroCompleto);
      res.status(201).json({message: "criado com sucesso", livro : livroCriado});
    } catch(erro){
      next(erro);
    }
  }

  static async atualizarLivro (req, res, next){
    try{
      const id = req.params.id;
      await livro.findByIdAndUpdate(id, req.body);
      res.status(200).json({message: "livro atualizado"});

    }catch(erro){
      next(erro);
    }
  }

  static async excluirLivro (req, res, next){
    try{
      const id = req.params.id;
      await livro.findByIdAndDelete(id);
      res.status(200).json({message: "livro deletado"});
    }catch (erro){
      next(erro);
    }
  }

  static async listarLivrosPorEditora(req, res, next){
    const editora = req.query.editora;
    try{
      const livrosPorEditora = await livro.find({ editora: editora});
      res.status(200).json(livrosPorEditora);
    } catch(erro){
      next(erro);
    }
  }

}

export default LivroController;
import mongoose from "mongoose";
import { autorSchema } from "./Autor.js";


const livroSchema = new mongoose.Schema({
  id: { type: mongoose.Schema.Types.ObjectId },
  titulo: { type: String, required: [true, "O titulo do livro é obrigatório"]},
  editora: { type: String},
  preco: { type: Number},
  paginas: { type: Number},
  autor: autorSchema
}, {versionKey: false});

const livro  = mongoose.model("livros", livroSchema);

export default livro;
1 resposta

Oi, Matheus! Tudo bem?

Analisando as classes de reconhecimento e definição das mensagens de erro, que você enviou, não há nenhum problema que possa gerar essa inconsistência.

Contudo, observando os métodos dentro da classe de LivrosController, mais especificamente no método cadastrarLivro, que é método que você chama no Postman. Notei que ele está um pouco diferente do que foi passado em aula, o mesmo pode está causando algum conflito, que gere o erro 500.

A minha teoria anterior ganha força ao visualizar o Schema de livros, onde apenas o atributo titulo recebe a propriedade required, isso significa que ele é o único atributo que não pode estar vazio quando um novo livro for cadastrado.

No mais, peço que verifique o método cadastrarLivro comparando ele com o da aula buscando ajustá-lo, além de passar as propriedades required para os outros atributos do Schema de livros.

Caso não consigo solucionar o seu problema com as informações que lhe passei, peço que compartilhe todo o seu projeto, via GitHub ou Drive do Google. Para eu realizar alguns testes.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software