1
resposta

Problema no fluxo de dados no método PATCH, o sql dá erro!

Estava finalizando o curso de Stream e Manipulação de arquivos. Na hora de refatorar os métodos, eu não consigo finalizar o PATCH.

O controller do patch:

    app.patch('/atendimentos/:id', (req, res) => {
            const id = parseInt(req.params.id);
            const valores = req.body;

            Atendimentos.altera(id, valores)
                .then(resultados => res.json({...valores, id}))
                .catch(erro => res.status(400).json(erro))
        });

O model:

    altera(id, valores){
            return repositorios.altera(id, valores)
                .then(resultados => { return (resultados)})
        }

O repositorio:

    altera(valores, id){
            const sql = 'UPDATE Atendimentos SET ? WHERE id=?';

            return query(sql, valores, id)
    }

Menssagem de erro do Mysql: "sqlMessage": "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1"

A SQL sendo executada:

"sql": "UPDATE Atendimentos SET pet = 'Marte 4', servico = 'tosa e banho', status = 'feito', data = '24/09/2021' WHERE id = ?"

EU não entendi como o id não captura e guarda na variável.

1 resposta

Oi, Yasmim! Tudo bem?

Desculpa a demora por um retorno.

O problema pode estar na ordem dos parâmetros passados na função query do repositório, pois o correto seria passar primeiro a query, depois os valores e em seguida o id, conforme a documentação do pacote mysql2.

Podemos alterar a função altera do repositório para o seguinte código:

altera(id, valores){
  const sql = 'UPDATE Atendimentos SET ? WHERE id=?';

  return query(sql, [valores, id])
    .then(resultados => { return (resultados)})
}

Espero que essa solução resolva o seu problema! Se ainda tiver alguma dúvida, é só perguntar.

Um forte abraço e bons estudos!

Caso este post tenha te 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