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

gostaria de saber pq eu não passo o response e o request para a função pegarTodasAsPessoas sendo que ela precisa receber esses parametros.

const {Router} = require('express') const PessoasController = require('../controllers/PessoaController')

const router = Router()

router.get('/pessoas', PessoasController.pegarTodasAsPessoas)

module.exports = router

2 respostas
solução!

Olá, Isabela!

O metodo "get()" do seu router (instância do Router do express) espera receber um ou mais "callbacks" como parâmetro após o primeiro parâmetro que é a rota. Um "callback" é basicamente uma função passada como parâmetro para outra função, e esse callback será invocado e tratado apenas dentro da função na qual ele foi passado como parâmetro (nesse caso o "get()").

Esse callback esperado pelo "get()" precisa ser uma função que receba como parâmetros o request, response e next (next apenas em alguns casos, não é o ponto principal aqui). No seu PessoasController imagino que o método "pegarTodasAsPessoas" esteja definido para receber esses parâmetros com algo parecido com:

async pegarTodasAsPessoas(req, res) {    
    // tratativa
}

Assim, imagine que em algum lugar dentro do método "get()" lá do Router do express (ou qualquer outra função de métodos http, post, put, etc.) eles invocarão a sua função callback (pegarTodasAsPessoas) e passarão o req e res como parâmetros.

Abaixo deixo um exemplo simples para entender o funcionamento de um callback e a passagem de parâmetros para ele.

function myLogger(qualquerCoisa) {
  console.log(qualquerCoisa);
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myLogger);

No exemplo temos duas funções: myLogger apenas recebe um parâmetro qualquer e loga no console; myCalculator recebe 3 parâmetros, os dois primeiros são números que deseja somar e o terceiro é uma função qualquer para fazer o que quiser com o resultado da soma. Como passamos a função myLogger, ela vai apenas logar o resultado da soma, mas poderia ser por exemplo uma função que multiplicasse o resultado da soma por 23, ou outra que enviasse o resultado para seu e-mail. Enfim, as possibilidades são múltiplas.

Mas veja que essa função callback que myCalculator espera deve ser capaz de receber apenas o parâmetro da soma, como dentro de myCalculator é a forma que invocaremos a função callback. Se myLogger não recebesse nenhum parâmetro ou esperasse mais de 1, teríamos um erro. No seu caso seria exatamente um erro que aconteceria caso o método do seu controller não esperasse receber nenhum parâmetro.

Em resumo, o método do Router espera apenas que você passe como parâmetro uma função válida que possa tratar o request e o response. Passando uma função válida, digamos que o resto é com eles, tratado diretamente na biblioteca Express.

Espero ter ajudado! Se ficou alguma dúvida não deixe de perguntar.

Nossa. Ótima explicação. Muito obrigado.

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