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

erro Invalid date

Olá! Apareceu esse erro no terminal:

Error: ER_TRUNCATED_WRONG_VALUE: Incorrect datetime value: 'Invalid date' for column 'data' at row 1
  code: 'ER_TRUNCATED_WRONG_VALUE',
  errno: 1292,
  sqlMessage: "Incorrect datetime value: 'Invalid date' for column 'data' at row 1",
  sqlState: '22007',
  index: 0,
  sql: "INSERT INTO Atendimentos SET `dataCriacao` = '2021-01-26 21:49:47', `data` = 'Invalid date'"
}

O meu código está:

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 atendimentoDatado = {...atendimento, dataCriacao, data}
        const sql = 'INSERT INTO Atendimentos SET ?'

Alguém conseguiria me ajudar, por favor? :)

20 respostas

Olá Tatiani, tudo bem?

Ao que parece, sua tabela foi criada com o campo data sendo do tipo DATE, ou seja, não espera receber a hora.

Você pode compartilhar a estrutura do banco para poder ver se tem como eu te ajudar melhor?

Cussa

Olá, Cussa! Então o data está definido comodatetime:

const sql = `CREATE TABLE IF NOT EXISTS Atendimentos (
            id int NOT NULL AUTO_INCREMENT, 
            cliente varchar(50) NOT NULL, 
            pet varchar(20), 
            servico varchar(20) NOT NULL, 
            data datetime NOT NULL, 
            dataCriacao datetime NOT NULL, 
            status varchar(20) NOT NULL, 
            observacoes text, 
            PRIMARY KEY (id));`

Oi Tatiani,

eu reparei agora que no SQL está falando que está com dada inválida.

"INSERT INTO Atendimentos SET `dataCriacao` = '2021-01-26 21:49:47', `data` = 'Invalid date'"

Logo, temos que ver se você está recebendo isso corretamente na linha

const data = moment(atendimento.data, 'DD/MM/YYYY').format('YYYY-MM-DD hh:mm:ss');

Confirme se no atendimento você está recebendo o campo data.

Isso, no console log de data retoronou Invalid date no terminal.

Então pelo jeito o erro está na hora que você está enviando os dados pelo Postman. Você pode compartilhar a chamada que você está executando?

Estou enviando em x-www-form-urlencoded:

data 27/01/2021

Se você fizer um console.log(atendimento.data), o que será exibido?

Exibiu undefined

Então o problema está na forma que você está criando a variável atendimento e settando os valores dela. Pode compartilhar esse código?

Compartilho o arquivo do models, certo?

Aqui:

const moment = require('moment');
const connection = require('../infra/conexao');

class Atendimento {
    adicionar(atendimento) {
        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 atendimentoDatado = {...atendimento, dataCriacao, data};
        const sql = 'INSERT INTO Atendimentos SET ?'
        console.log(atendimento.data);

        connection.query(sql, atendimentoDatado, (erro, resultados) => {
            if (erro) {
                console.log(erro);
            } else {
                console.log(resultados);
            }
        })
    }
}

module.exports = new Atendimento;

Na verdade, eu precisaria ver o código do Controller onde você está chamando Atendimento.adicionar.

Aqui o controller:

app.post('/atendimentos', (req, res) => {
        const atendimento = req.body;
        Atendimento.adicionar(atendimento);
        res.send('Post atendimento');
    });

Tem como você mandar o resultado do console.log(req.body) para vermos o que você está recebendo?

O console.log aparece {}

Ok. Chegamos a um ponto interessante do projeto: isso significa que você não está recebendo nada na hora que está enviando pelo post. Agora você precisa confirmar se está tudo certo na hora que você está enviando pelo Postman.

Agora estou tentando com json e continua retornando vazio:

{
    "cliente": "ana gabriela",
    "pet": "toto",
    "servico": "tosa",
    "data": "27/01/2021",
    "status": "agendado",
    "observacoes": "bravo"
}

Você pode enviar o console.log do req.body novamente, agora com as mudanças que você fez?

O console.log de req.body continua retornando vazio {}

Dei console.log no atendimentoDatado também e retornou: { dataCriacao: '2021-01-27 13:59:05', data: 'Invalid date' }

Tirei o formato anterior declarado no moment:

const data = moment(atendimento.data).format('YYYY-MM-DD hh:mm:ss');

E no console aparece assim, sem o erro de data inválida:

{ dataCriacao: '2021-01-27 17:51:30', data: '2021-01-27 05:51:30' }

Mas agora apareceu o seguinte erro, relacionado ao cliente:

Error: ER_NO_DEFAULT_FOR_FIELD: Field 'cliente' doesn't have a default value
solução!

Olá Tatiani.

Eu estou tentando entender o que está acontecendo no seu caso e comparando com o meu código, mas não consigo encontrar o problema. Inclusive peguei o seu json e enviei para o meu serviço e ele funcionou perfeitamente.

Confesso que estou curioso para tentar entender. Caso queira, podemos marcar uma chamada via zoom para você compartilhar sua tela comigo e eu posso tentar te ajudar a debugar e ver onde está o problema.

Caso queira, a forma mais fácil de falar comigo é via telegram (https://t.me/cussamitre).