Skip to content

mottak/exercise-mvc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Esse é um projeto para o conteúdo do bloco 27, sobre Arquitetura de Software - Introdução ao MVC.

Antes de iniciar

Crie um fork desse projeto e para isso siga esse tutorial de como realizar um fork.

Após feito o fork, clone o repositório criado para o seu computador.

Cada exercício tem sua pasta e dentro dela, você irá encontrar um README.md, com instruções de como realizar o exercício.

Antes de fazer cada exercício, siga os seguintes passos:

  • Crie uma nova branch.
  • Use cd [diretório do exercicio] para entrar no diretório do exercício.
  • Execute npm install para instalar suas dependências.

Após a solução dos exercícios, abra um PR no seu repositório forkado e, se quiser, mergeie para a master, sinta-se a vontade!

Atenção! Quando for criar o PR você irá se deparar com essa tela:

PR do exercício

É necessário realizar uma mudança. Clique no base repository como na imagem abaixo:

Mudando a base do repositório

Mude para o seu repositório. Seu nome estará na frente do nome dele, por exemplo: antonio/TicTacToe. Depois desse passo a página deve ficar assim:

Após mudança

Agora basta criar o PULL REQUEST clicando no botão Create Pull Request.

Para cada PR realize esse processo.

Revisando

  1. Primeiro vamos iniciar nosso servidor usando o express. Para isso, importe o express, depois, utilize o express() para criar uma instância do express e armazena-la na variável app. Agora, use o app.listen() para ouvir a porta 3000. Você pode passar um console.log com alguma frase como segundo argumento pra saber se seu servidor iniciou como deveria.

  2. Agora precisamos criar o model que será responsável por fazer as requisições da nossa API de piada. Crie o diretório model e dentro dele crie um arquivo com o nome de joke.js. Nosso model terá apenas 1 função, a função getJokes(). Essa função faz uma chamada no endpoint "https://sv443.net/jokeapi/v2/joke/Programming?blacklistFlags=nsfw,religious,political,racist,sexist&type=single" utilizando o axios. O axios retorna a informação dentro da propriedade data. Essa propriedade será algo parecido com isso:

{
  "error": false,
  "category": "Programming",
  "type": "single",
  "joke": "There are only 10 kinds of people in this world: those who know binary and those who don't.",
  "flags": {
    "nsfw": false,
    "religious": false,
    "political": false,
    "racist": false,
    "sexist": false
  },
  "id": 35,
  "lang": "en"
}

Assim, nossa função deve retornar a propriedade data.joke da requisição do axios.

  1. Com o model criado, está na hora de criar um controller. O controller de uma rota controla o que acontece quando uma requisição acontece, assim,a função do nosso controller será receber a requisição, chamar a função getJokes() do model, e renderizar uma view com a piada retornada. Ok, vamos devagar. Primeiro, crie a função. Como o endpoint que usaremos tem a função de listar as piadas, chame a função de listJokes e não se esqueça, ela deve receber 2 parâmetros, req e res. Agora, dentro do escopo da nossa função, chamaremos a função getJokes() do model. Não se esqueça de usar o async/await ou o .then() para controlar o fluxo!. Já já vamos voltar pra criar a resposta, mas antes disso, vamos criar uma view!

DICA: Nossa função não usará nenhum dado da requisição, logo o parâmetro req não será utilizado. Para mostrar que voce não tem a intenção de usar um parâmetro, você pode utilizar um _ antes dele. Por exemplo, nosso função ficaria assim: listJokes(_req, res)

  1. Vamos a view! Primeiro, vamos avisar ao express que pretendemos usar o ejs como engine para renderizar nossa views. Para isso, no nosso arquivo index.js vamos chamar a função app.set('view engine', 'ejs'). Agora, precisamos informar o express onde procurar por views quando for pedido para renderizá-las. Para isso, ainda no arquivo index.js usaremos um app.set('views', './views');. Pronto, agora que já configuramos, vamos criar a view de fato!

  2. Crie a pasta views e dentro dela crie o arquivo jokeVew.ejs. Dentro do arquivo, crie a estrutura padrão do HTML. Lembre-se, um arquivo ejs funciona como um HTML, só que com algumas "habilidades especiais". Para nossa view, vamos apenas mostrar na página a piada dentro de uma tag h1, assim, no body, crie a tag h1 e dentro vamos colocar a variável joke. Lembre-se que pra isso, temos que usar a estrutura especial <%= %>.

  3. Com a view criada, esta na hora de usá-la no controller. No final do controller vamos retornar como resposta nossa view, assim, use um return res.render(). O render deve receber 2 argumentos. O primeiro é o caminho da nossa view. Lembre-se que deve ser uma string e que o caminho toma como base a pasta views, já que foi nela que configuramos nosso express pra procurar. No nosso caso, o primeiro argumento será apenas 'jokeView.ejs'. O segundo argumento é um objeto com as variáveis que desejamos passar para nossa view. Como só usamos uma variável na view, a variável joke, temos que passar como segundo argumento { joke }. Com isso, nosso controller esta pronto pra uso! Como ultimo passo, só precisamos passar pro express a rota que será controlada por esse controller.

  4. No arquivo index.js, vamos juntar rota e controler. Para isso vamos usar o app.get(), vamos passar 2 argumentos para ele , o primeiro será nossa rota. Como ela será única, podemos usar o '/'. O segundo é controller. Importe-o e passeo como segundo argumento. Lembre-se que é uma callback, então voce não utilizará o () no final.

Piadas Chuck Norris

Vamos criar uma aplicação simples que faz chamadas a uma API de piadas sobre o Chuck Norris. A aplicação terá 2 "partes". Uma que mostra as categorias das piadas e direciona a pessoa para a segunda parte, onde a chamada da API de piadas é feita e a piada é de fato retornada. Então, vamos lá ?

Parte 1

Vamos começar fazendo a parte das categorias. Para essa parte já criamos a view para você!

  • Primeiro crie uma pasta models e nela crie um model para as categorias. Nele deve haver uma função que faz uma chamada a API de categorias.

  • Agora, vamos criar o controller. Lembre-se que o controller tem como uma de suas funções unificar o model com nossa view. Importe o model das categorias e use a função criada anteriormente para obter uma lista de categorias. Depois, utilize o res.render para renderizar a view de categorias e passar a variável categories para ela. A view se encontra na pasta views/categories.

  • Agora, no nosso arquivo index.js vamos usar o controller que acabamos de criar. Ele deve estar ligado ao endpoint /categories. Não se esqueça de usar o express para realizar e o ejs como template engine.

  • Para finalizar, vamos criar mais uma função no controller de categorias. Queremos que ao acessar o endpoint '/', o usuário seja levado para o endpoint '/categories', crie uma função que faça esse redirecionamento. DICA: Olhe a função res.redirect() na documentação do express.


Parte 2

Agora vamos as piadas em si. Essa etapa será um pouco menos descritiva e dessa vez você terá que fazer as 3 partes do modelo MVC: a view, o controller e o model.

  • O model das piadas deve fazer chamadas para o endpoint de piada aleatório e para o endpoint de piada por categoria.

  • A view deve conter pelo menos 2 campos, um botão para voltar para a página de categorias e um campo onde vai exibir a piada retornada pela API

  • O endpoint /jokes deve retornar uma piada aleatória sem categoria específica ( o que corresponde ao link da categoria all ) e os endpoints /jokes/:categorie deve exibir uma piada de uma categoria específica, que vem como parêmetro da URL.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages