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

res.status is not a function

tá dizendo que res.status não é uma função. segue meu codigo do models/atendimento

const moment = require('moment')
const conexao = require('../infraEstrutura/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 validaData = moment(data).isSameOrAfter(dataCriacao)
        const validaCliente = atendimento.cliente.lenght >= 4

        const validacoes = [
            {
                nome: 'data',
                valido: validaData,
                mensagem: 'Data deve ser maior ou igual a data atual'
            },
            {
                nome: 'cliente',
                valido: validaCliente,
                mensagem: 'O nome deve conter ao menos 4 caracteres'
            }
        ]

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

        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 {
                    res.status(201).json(resultados)
                }
            })
        }
    }

    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)
            }
        })
    }
}

module.exports = new Atendimento
4 respostas

Boa tarde Jian, tudo certo?

Você poderia colar aqui como resposta o erro exato que você está recebendo?

De preferência, também compartilhe conosco o projeto no GitHub com o que você desenvolveu até agora, isso nos ajuda a encontrar eventuais erros mais facilmente.

Estou no aguardo!

erro no prompt:

C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

TypeError: res.status is not a function
    at Query.<anonymous> (C:\Users\jian_\OneDrive\Alura\NodeJS\models\atendimento.js:56:21)
    at Query.<anonymous> (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\Connection.js:526:10)
    at Query._callback (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\Connection.js:488:16)
    at Query.Sequence.end (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
    at Query._handleFinalResultPacket (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\sequences\Query.js:149:8)
    at Query.EofPacket (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\sequences\Query.js:133:8)
    at Protocol._parsePacket (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (C:\Users\jian_\OneDrive\Alura\NodeJS\node_modules\mysql\lib\protocol\Protocol.js:38:16)
[nodemon] app crashed - waiting for file changes before starting...

link no github: https://github.com/jianLicio/alura-nodejs

solução!

Jian, eu tenho duas suspeitas do que podem estar causando esse erro:

A primeira e mais provável é que você definiu corretamente a função lista, mas no controllers/atendimentos.js esqueceu de passar um dos parâmetros para a arrow function antes de res. O seu código está assim na linha 3 do repositório no caminho controllers/atendimentos.js:

module.exports = app => {
    app.get('/atendimentos', res => {
        Atendimento.lista(res)
    })

Mas deveria estar assim:

module.exports = app => {
    app.get('/atendimentos', (req, res) => {       //Mudança aqui
        Atendimento.lista(res)
    })

Isso acontece pois as variáveis passadas no terceiro parâmetro devem ser, nessa ordem, o request HTTP (req), a resposta (res) e a próxima rota (next ou prox - é abordado adiante na formação Node.js com Express).

A forma do JavaScript saber qual variavel corresponde à cada coisa é a posição da variável. Sempre é possível recorrer à documentação do Express para lembrar onde fica cada item.

Se têm alguma dúvida sobre as arrow functions, recomendo a lida em nosso artigo sobre Arrow Functions.

Outro problema que pode ocorrer, mas que depende de como foi configurado o seu banco de dados no seu ambiente de desenvolvimento, é a query SQL na linha 49 em models/atendimento.js em que você chamou const sql = 'SELECT * FROM atendimentos' e utilizou atendimentos com a letra a minúscula.

Espero ter ajudado a corrigir o problema. Qualquer coisa é só responder aqui no tópico. Bons estudos!

Obrigado joão, era o (req, res) que estava faltando mesmo