5
respostas

Problema com Axios (acho rsr) - Curso de NodeJS: Streaming de dados e Repositório

Meu código está exatamente como o montado na aula (acredito eu), porém ao fazer o request, se percebe que meu código não esta consumindo a API que retorna o objeto com os dados da pessoa, entao meu response vem só com o CPF no campo cliente.

eu faco a importacão aqui :

importacao da lib

Faco o request usando axios aqui exatamente como o código da aula:

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

Porem o retorno no Postman vem assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO correto seria o value da key 'cliente' ser um objeto retornado pela API que estamos usando no curso.

Aqui segue o código completo:

const moment = require('moment')
const axios = require('axios')
const conexao = require('../infraestrutura/database/conexao')

class Atendimento {
    adiciona(atendimento, res) {
        const dataCriacao = moment().format('YYYY-MM-DD HH:MM:SS')
        const data = moment(atendimento.data, 'DD/MM/YYYY').format(
            'YYYY-MM-DD HH:MM:SS'
        )

        const dataEhValida = moment(data).isSameOrAfter(dataCriacao)
        const clienteEhValido = atendimento.cliente.length >= 5

        const validacoes = [
            {
                nome: 'data',
                valido: dataEhValida,
                mensagem: 'Data deve ser maior ou igual a data atual'
            },
            {
                nome: 'cliente',
                valido: clienteEhValido,
                mensagem: 'Cliente deve ter pelo menos cinco caracteres'
            }
        ]

        const erros = validacoes.filter(campo => !campo.valido)
        const existemErros = erros.length

        if (existemErros) {
            res.status(400).json(erros)
        } else {
            const atendimentoDatado = { ...atendimento, dataCriacao, data }

            const sql = 'INSERT INTO Atendimentos SET ?'

            conexao.query(sql, atendimentoDatado, (erro, resultados) => {
                if (erro) {
                    res.status(400).json(erro)
                } else {
                    const id = resultados.insertId
                    res.status(201).json({ ...atendimento, id })
                }
            })
        }
    }

    lista(res) {
        const sql = 'SELECT * FROM Atendimentos'

        conexao.query(sql, (erro, resultados) => {
            if (erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json(resultados)
            }
        })
    }

    buscaPorId(id, res) {
        const sql = `SELECT * FROM Atendimentos WHERE id=${id}`

        conexao.query(sql, async (erro, resultados) => {
            const atendimento = resultados[0]
            const cpf = atendimento.cliente
            if (erro) {
                res.status(400).json(erro)
            } else {
                const { data } = await axios.get(`http://localhost:8082/${cpf}`)

                atendimento.cliente = data

                res.status(200).json(atendimento)
            }
        })
    }

    altera(id, valores, res) {
        if (valores.data) {
            valores.data = moment(valores.data, 'DD/MM/YYYY').format(
                'YYYY-MM-DD HH:MM:SS'
            )
        }
        const sql = 'UPDATE Atendimentos SET ? WHERE id=?'

        conexao.query(sql, [valores, id], (erro, resultados) => {
            if (erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json({ ...valores, id })
            }
        })
    }

    deleta(id, res) {
        const sql = 'DELETE FROM Atendimentos WHERE id=?'

        conexao.query(sql, id, (erro, resultados) => {
            if (erro) {
                res.status(400).json(erro)
            } else {
                res.status(200).json({ id })
            }
        })
    }
}

module.exports = new Atendimento()
5 respostas

Bom dia Ewerton, tudo certo?

Realmente parece que a sua chamada está adequada. Poderia nos mostrar o que acontece se você fizer uma requisição do tipo GET para http://localhost:8082/40641602820? Eu suspeito que o serviço não esteja funcionando de acordo.

Estarei no aguardo.

Bom dia João, tudo certo! Obrigado pela atencão!

Quando faco uma chamada assim ele retorna certinho, olha...

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

Então Ewerton, honestamente eu e meus colegas não conseguimos achar o que pode ser a causa dessa situação. E como ambas as APIs estão respondendo eu tenho duas sugestões:

  • Você pode compartilhar conosco o projeto no GitHub e enviar o link aqui para que possamos investigar mais, pois isso pode ser alguma diferença em uma versão de uma das dependências do projeto.
  • Você pode clonar o repositório ao final da Aula 3 e tentar executar da mesma forma para ver se o comportamento é resolvido.

Espero ter ajudado. Qualquer coisa estamos aqui à disposição. Bons estudos!

Pior que eu já rodei até com o projeto baixado zipado que é disponibilizado ao final do módulo :(

Bom, se ajudar esse é o link do meu github

https://github.com/ebcoutinho91/API-Agendamento-Petshop-NodeJS.git

Boa tarde Ewerton, tudo certo?

Depois de interagir mais com o seu projeto consegui entender o motivo da confusão:

O seu resultado está correto e de acordo com a aula. O comportamento esperado é que após fazer uma requisição do tipo POST e inserir um novo atendimento, apenas os campos cadastrados são retornados, sem fazer uma consulta à API dos CPFs. Vide a aula aos 06:40.

A chamada ao Axios apenas é feita dentro da função buscaPorId(), ou seja, apenas quando fizermos uma requisição à um recurso como um GET em http://localhost:3000/atendimentos/3. E quando feita essa requisição o projeto respondeu devidamente. Caso você queira, é possível adicionar uma chamada ao Axios no método adiciona()da classe Atendimento similar ao existente no método buscaPorId().

Durante o processo também notei que a estrutura dos arquivos era diferente do material do curso em algumas instâncias, e isso pode ser a causa de alguns dos problemas na execução do projeto. Mas não se preocupe, recomendo seguir a formação e caso tenha algum erro durante o processo faça um clone dos repositórios oferecidos pelos instrutores.

Espero ter ajudado e bons estudos!