5
respostas

Erro - Model.prototype.save() no longer accepts a callback

Não consigo inserir informações no Banco, sempre que tento inserir uma nova informação aparece "Model.prototype.save() no longer accepts a callback", creio que assim como a listagem, precisarei usar o Try{} Catch{}, porém não estou conseguindo fazer de uma forma que funcione, alguém sabe como fazer funcionar?

5 respostas

Olá Pedro, tudo bem?

Tive o mesmo problema e contornei com o código abaixo:

    static cadastrarLivro = (req, res) => {
        let livro = new livros(req.body);
        livro.save()
            .then(res.status(201).send(livro.toJSON()))
            .catch((err) => {
                res.status(500).send({message: `${err.message} - falha ao cadastrar livro.`})
            })
    }

Agora está retornando o seguinte erro: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client, segue print do código.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

esse erro aparece em qual linha?

Reparei que a solução que dei funciona se a requisição for enviada corretamente, mas se tiver algo faltando, como o nome da editora, aí surge o erro. Também estou parado tentando resolver esse erro rs rs

Outra maneira semelhante a forma como Rodrigo Guedes de Morais resolveu, porem usando async/await

static cadastrarLivro = async (req, res) => {
    try {
        let livro = new livros(req.body);
        await livro.save();
        res.status(201).send(livro.toJSON());
    } catch (error) {
        res.status(501).send({message: `${error.message} - erro ao cadastrar livro`}

Aqui funcionou usando o postman. O body da requsicao é o seguinte:

{
    "titulo": "um titulo",
    "autor": "um autor",
    "editora": "uma editora",
    "numeroPaginas": 232
}

Este é o header da requisição

header da requisição

Este é o header da resposta

header da resposta