1
resposta

Erro na consulta por Editora

Quando tento realizar um consulta passando como parametro a editora é apresentado o erro:

"The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received function model"

Inicialmente, acrei que fosse erro no model, mas n identifiquei nada.

import mongoose from "mongoose";

const livroSchema = new mongoose.Schema(
    {
        id: {type: String},
        titulo: {type: String, required: true},
        autor: {type: mongoose.Schema.Types.ObjectId, ref: 'autores', required: true},
        editora: {type: String, required: true},
        numeroPaginas: {type: String}
    } 
);

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

export default livros;

Em seguida, verifiquei o método de consulta, mas tb não identifiquei onde pode está o erro.

static listarLivroPorEditora = async (req, res) => {
        try{
            const editora = await req.query.editora;
            livros.find({'editora': editora})
            res.status(200).send(livros)
        }catch(err) {
            res.status(500).send({message: `${err.message} - Erro na consulta`})
        }
    }
1 resposta

Olá Arthur, tudo bem?

Pelo erro apresentado, parece que o parâmetro que está sendo passado para a consulta não é uma string. Na verdade, o erro indica que está sendo passada uma função do tipo modelo (model).

Verifiquei seu código e parece que o problema está na linha onde você está tentando obter o valor do parâmetro "editora" da requisição. Você está utilizando o "await" para obter o valor, mas, na verdade, não é necessário, já que o "req.query.editora" já retorna uma string.

Tente alterar essa parte do código para:

const editora = req.query.editora;

O await deveria está em outra variável, responsável por passar o estado da requisição para uma condição é mostrar o resultado concluído. Como mostrado abaixo:

const livrosResultado = await livros.find({editora: editora});
if(livrosResultado !== null) {
    res.status(200).json(livrosResultado) 
}

Dessa forma, deve funcionar corretamente.

Caso queira, o código completo ficaria assim:

static listarLivroPorEditora = async (req, res) => {
        try {
            const editora = req.query.editora;

            const livrosResultado = await livros.find({editora: editora});

            if(livrosResultado !== null) {
                res.status(200).json(livrosResultado);
            } 

        } catch (error) {
            res.status(500).send({messagem: `${error.message} - Erro interno no serivor`});
        }
    };

Espero ter conseguido resolver o seu problema. Caso tenha mais alguma questão, estarei à disposição para ajudá-lo.

Abraços 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