1
resposta

[Projeto] Diferenças no código

Quando abri o codigo no github, percebi uma diferença que não foi comentado ate agora, os metodos populate() e exec()....

no arquivo livroController do curso anterior esta :

static async listarLivros (req, res) {
    try {
      const listaLivros = await livro.find({});
      res.status(200).json(listaLivros);
    } catch (erro) {
      res.status(500).json({ message: `${erro.message} - falha na requisição` });
    }
  };

  static async listarLivroPorId (req, res) {
    try {
      const id = req.params.id;
      const livroEncontrado = await livro.findById(id);
      res.status(200).json(livroEncontrado);
    } catch (erro) {
      res.status(500).json({ message: `${erro.message} - falha na requisição do livro` });
    }
  };

Enquanto no curso atual esta :

static listarLivros = async (req, res) => {
    try {
      const livrosResultado = await livros.find()
        .populate("autor")
        .exec();

      res.status(200).json(livrosResultado);
    } catch (erro) {
      res.status(500).json({ message: "Erro interno no servidor" });
    }
  };

  static listarLivroPorId = async (req, res) => {
    try {
      const id = req.params.id;

      const livroResultados = await livros.findById(id)
        .populate("autor", "nome")
        .exec();

      res.status(200).send(livroResultados);
    } catch (erro) {
      res.status(400).send({message: `${erro.message} - Id do livro não localizado.`});
    }
  };

O que é, oque faz esses metodos ?!?! E por que a mudança do codigo ja que "atual" seria uma continuação do anterior ?

1 resposta

Oii Leonardo, tudo bem?

Os métodos populate() e exec() são funções do Mongoose, que é uma biblioteca do Node.js para modelagem de objetos MongoDB.

O método populate() é usado para preencher automaticamente os campos especificados em outros documentos. No caso do seu código, ao fazer populate("autor"), o Mongoose está preenchendo automaticamente o campo "autor" no documento de livros com os detalhes do autor correspondente. Isso é útil quando você tem relações entre diferentes coleções (como livros e autores) e deseja recuperar informações de ambas em uma única consulta.

Já o método exec(), é usado para executar uma consulta. Quando você chama exec(), o Mongoose executa a consulta e retorna uma Promise. Isso permite que você use await para esperar que a consulta seja concluída.

A mudança do código do curso anterior para o atual provavelmente se deve ao fato de que o curso atual está lidando com relações entre coleções. No curso atual, queremos recuperar informações sobre os livros e seus autores correspondentes, então usamos populate("autor") para preencher automaticamente os detalhes do autor.

Um abraço e bons estudos.

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