1
resposta

Não consigo localizar o livro pelo ID

Executo o código no Postman, consigo pegar os items, mas na hora que vou buscar pelo id para atualizar ou deletar, é gerado um erro.

import express from "express";

const app = express();
// Middlewares para converter as requisições para json
app.use(express.json());

const livros = [
    {
        id: 1,
        titulo: "O Senhor do Anéis",
    },
    {
        id: 2,
        titulo: "O Hobbit",
    }
];

// Funcao para buscar um livro pelo ID
function buscaLivro(id) {
    return livros.findIndex(livro => {
        return livro.id === Number(id);
    });
};

app.get("/", (req, res) => {
    res.status(200).send('Testando API com Express');
});

app.get("/livros", (req, res) => {
    res.status(200).json(livros);
});

// rota de localiza livro pelo ID
app.get("/livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    res.status(200).json(livros[index]);
});

// rota de criação de um novo objeto dentro da rota Livros
app.post("/livros", (req, res) => {
    livros.push(req.body);
    res.status(201).send("Livro Cadastrado com Sucesso!")
});


// Alterar um registro que já existe
app.put("/livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    livros[index].titulo = req.body.titulo;
    res.status(200).json(livros);
});

// Deletar um livro
app.delete ("livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    livros.splice(index, 1);
    res.status(200).send("Livro removido com sucesso!"); 
});

export default app;``

Não consigo entender o porquê.

1 resposta

Olá Felipe! Tudo joia?

Pelo que você descreveu, parece que o erro ocorre quando você tenta buscar, atualizar ou deletar um livro pelo ID usando o Postman, mas consegue listar todos os livros sem problemas. Isso sugere que o problema pode estar relacionado com a forma como o ID está sendo manipulado ou acessado nas rotas específicas.

Uma coisa importante a verificar é se o ID que você está passando pelo Postman está realmente presente na array livros. Além disso, é crucial garantir que o código está tratando corretamente os casos em que o livro não é encontrado, o que pode ser a causa do erro que você está enfrentando.

Atualmente, sua função buscaLivro retorna o índice do livro na array ou -1 se o livro não for encontrado. No entanto, nas rotas que utilizam essa função, não há uma verificação para tratar o caso em que o livro não é encontrado (quando index é -1). Isso pode causar erros, pois tentativas de acessar livros[-1] resultarão em undefined, e tentar modificar ou deletar um elemento undefined pode gerar erros.

Aqui está uma sugestão de como você pode modificar as rotas para tratar esses casos:

// rota de localiza livro pelo ID
app.get("/livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    if (index === -1) {
        res.status(404).send('Livro não encontrado');
    } else {
        res.status(200).json(livros[index]);
    }
});

// Alterar um registro que já existe
app.put("/livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    if (index === -1) {
        res.status(404).send('Livro não encontrado para atualização');
    } else {
        livros[index].titulo = req.body.titulo;
        res.status(200).json(livros);
    }
});

// Deletar um livro
app.delete("/livros/:id", (req, res) => {
    const index = buscaLivro(req.params.id);
    if (index === -1) {
        res.status(404).send('Livro não encontrado para remoção');
    } else {
        livros.splice(index, 1);
        res.status(200).send("Livro removido com sucesso!");
    }
});

Essas alterações adicionam uma verificação para cada rota que lida com um ID específico, retornando um erro 404 se o livro não for encontrado. Isso deve ajudar a evitar os erros que você está enfrentando e tornar a API mais robusta e fácil de debugar.

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