5
respostas

Livro Filtrado não aparece no Postman

Aqui está o que eu recebo quando tento buscar o livro específico pelo ID: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

não sei o que aconteceu, o livros.json está todo certinho e quando eu tiro o ID do endereço aparecem todos os livros que tenho disponíveis

5 respostas

Coloca o código dessa parte do seu sistema por favor, para poder avaliar o que pode ter acontecido.

rotas/livros.js:

const { Router } = require("express")
const { getLivros, getLivro } = require("../controladores/livro")

const router = Router()

router.get('/', getLivros)

router.get('/:id', getLivro)

router.post('/', (req, res) => {
    res.send("Você fez uma requisição do tipo POST")
})

router.patch('/', (req, res) => {
    res.send("Você fez uma requisição do tipo PATCH")
})

router.delete('/', (req, res) => {
    res.send("Você fez uma requisição do tipo DELETE")
})

module.exports = router

controladores/livros.js:

const { getTodosLivros, getLivroById } = require('../servicos/livro')


function getLivros (req, res) {
    try {
        const livros = getTodosLivros()
        res.send(livros)
    }
    catch(error) {
        res.status(500)
        res.send(error.message)
    }
}

function getLivro (req, res) {
    try {
        const id = req.params.id
        const livro = getLivroById(id)
        res.send(livro)
    }
    catch(error) {
        res.status(500)
        res.send(error.message)
    }
}

module.exports = {
    getLivros,
    getLivro
}

servicos/livros.js:

const fs = require('fs')

function getTodosLivros() {
    return JSON.parse( fs.readFileSync('livros.json'))
}

function getLivroById(id) {
    const livros = JSON.parse(fs.readFileSync('livros.json'))

    const livroFiltrado = livros.filter( livro => livro.id === id ) [0]
    // [ { id: 2, nome: "livro irado" } ]

    return livroFiltrado
}

module.exports = {
    getTodosLivros,
    getLivroById
}

O código parece certo. Só fiquei na dúvida sobre o conteúdo do seu livros.json, se nele o id estiver como string ao invés de numero, não vai encontrar o livro por vc estar usando === que checaria também o tipo, ao contrário de == que também pegaria tanto '2' quanto 2.

Sugiro colocar console.logs no seu código antes e depois do filter para ver o que ele printa.

De fato, quando eu deixo == aparece tudo certinho... Mas no meu livros.json os id's estão como números e não strings...

Então nesse caso é o parâmetro que vem da url que está como string. Converte ele com parseInt() antes de comparar no filter.