Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Projeto] Sugestão para os colegas alunos!!

Olá, fiz algumas alterações relacionadas a inserção de dados de busca inválidos como sugerido no final do curso!! Nas buscas por ID alterei a verificação - if (id && getLivroPorId(id)) e no método post incluí a obrigatoriedade de se passar um ID.

function getLivro(req, res) {
    try {
        const id = req.params.id

        if(id && getLivroPorId(id)) {
            const livro = getLivroPorId(id)
            res.send(livro)
        }else{
            res.status(422).send("Id inválido.")
        }

    } catch (error) {
        res.status(500).send(error.message)
    }
}

function postLivro(req, res) {
    try{
        const livroNovo = req.body
        if(req.body.nome && req.body.id) {
            insereLivro(livroNovo)
            res.status(201).send("Livro inserido com sucesso.")
        }else{
            res.status(422).send("Os campos nome e id são obrigatórios.")
        }
    }catch(error) {
        res.status(500).send(message.error)
    }
}

Também retirei as variáveis "livros" que estavam nas funções do services e criei uma variável let livros fora das funções para evitar a repetição de código.

let livros = JSON.parse(fs.readFileSync("livros.json"))
3 respostas
solução!

Uma sugestão. Na função postLivro, no if, pode usar a desestruturação de objeto também. Pode usar também na primeira função.

const { id } = req.params

Assim, caso tenham várias variáveis dentro do req.params, não precisa fazer uma linha pra cada um. Vai apenas adicionando dentro das chaves os atributos.

e catchs, poderia fazer assim:

catch(error) {
    res.status(500).send(message.error)
}

Obrigado pelas dicas Luís Fernando de Oliveira Freire!!

Testando o getLivro passando um id tipo number que não estava inserido no json, passou pela verificação, por isso modifiquei para testar se existe conteúdo referente ao id inserido, daí tanto faz o tipo presente no id, só executa a função se for id válido.

function getLivro(req, res) {
    try {
        const id = req.params.id

        if ( getLivroPorId(id) ) {

            const livro = getLivroPorId(id)
            res.send(livro)
        } else {
            res.status(422)
            res.send("Id inválido")
        }

    } catch (error) {
        res.status(500)
        res.send(error.message)
    }
}