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

Método criaMatricula. Por que o atributo novaMatricula precisa de spread?

Boa tarde, gente.

Eu não tenho o que reclamar do curso. Ele realmente é muito bom. MAS tem uma coisa que na minha visão deixou a desejar. A única coisa que eu não entendi desse curso foi a função criaMatricula, da aula 6 - atividade 5.

A professora não explicou o por que faz o spread do req.body, e como estudante_id reconheceu ser o campo estudante_id.

Eu realmente não entendi nada desse método. Alguém consegue me explicar melhor?

Por que precisa ser spread e não direto?

Obg

3 respostas

Olá Pedro,

Isso por que dentro da tabela Matrícula, um dos campos é o estudante_id e este parâmetro vem via URI.

Os campos de Matrícula são: status, turma_id eestudante_id

No exemplo, a professora passou no corpo da requisição o status e a turma_id dessa maneira:

  {
     "status": "confirmado",
     "turma_id": 4
   }

E para completar o campo que falta para poder criar uma nova matrícula no DB, ela apenas criou um novo objeto chamado novaMatricula, com todos os campos do corpo da requisição (fez isso com o spread operator) e com a propriedade estudante_id que faltava e que veio via URI. No final, novaMatricula ficou assim:

  {
     "status": "confirmado",
     "turma_id": 4
     "estudante_id": 1
   }

Só lembrando que ela pegou o valor 1 do estudante_id que foi passado via URI na linha const {estudanteId} = req.params, por isso ela pode fazer const novaMatricula = { ...req.body, estudante_id: Number(estudanteId) }

Eu poderia ter feito então dessa forma?

{...req.body, estudante_id: (Number(req.params)}

solução!

Na verdade, se você fizesse dessa forma, você pegaria o objeto inteiro, que seria assim: { estudanteId: '1' }. Para fazer dessa forma que você quer o correto seria pegar a propriedade do objeto retornado por req.params e ficaria assim seu código: {...req.body, estudante_id: (Number(req.params.estudanteId)}