<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Pablo Ferrari</title>
    <description>The latest articles on Forem by Pablo Ferrari (@pabloferrari013).</description>
    <link>https://forem.com/pabloferrari013</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F759597%2F8346dd5b-bd18-4427-b48b-85133e8a1fff.jpg</url>
      <title>Forem: Pablo Ferrari</title>
      <link>https://forem.com/pabloferrari013</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pabloferrari013"/>
    <language>en</language>
    <item>
      <title>Guia de autenticação do Next.Js com Github e Typescript</title>
      <dc:creator>Pablo Ferrari</dc:creator>
      <pubDate>Wed, 05 Oct 2022 19:54:30 +0000</pubDate>
      <link>https://forem.com/pabloferrari013/guia-de-autenticacao-do-nextjs-com-github-e-typescript-5h8o</link>
      <guid>https://forem.com/pabloferrari013/guia-de-autenticacao-do-nextjs-com-github-e-typescript-5h8o</guid>
      <description>&lt;p&gt;O Next.js é um framework para React incrível com foco em eficiência, totalmente pré-configurado, que reúne diversas funcionalidades.&lt;/p&gt;

&lt;p&gt;Nesse artigo irei abordar uma das funcionalidades no Next.Js, que é a autenticação de usuários com o provedor do Github. Ao final desse artigo você será capaz de criar um sistema de autenticação de usuário completo. &lt;/p&gt;

&lt;h2&gt;
  
  
  Criação do projeto
&lt;/h2&gt;

&lt;p&gt;A primeira coisa que precisamos fazer é criar uma pasta em nossa máquina para o projeto. &lt;/p&gt;

&lt;p&gt;Para criar nosso projeto precisamos primeiro acessar o diretório da pasta pelo terminal ou pelo editor de texto, como o exemplo abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ng20joi12ezvkyknm5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ng20joi12ezvkyknm5u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora basta que rodemos o comando abaixo para criar um novo projeto Next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn create next-app --typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No campo em que aparece em seu terminal informe o nome do projeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfgbp9hxb0ragqkvtdv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfgbp9hxb0ragqkvtdv1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Precisamos agora acessar a pasta do projeto em nosso terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd .\next-auth-with-github\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Insira o comando abaixo no terminal para acessar nosso projeto no navegador:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora basta que acessemos a URL abaixo no navegador de preferência:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Criação do OAuth
&lt;/h2&gt;

&lt;p&gt;Agora que já estamos com o projeto criado precisamos criar um aplicativo OAuth em nosso Github para podermos consumi-lo posteriormente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/settings/developers" rel="noopener noreferrer"&gt;Clicando aqui&lt;/a&gt; seremos redirecionados para o painel de aplicativos OAuth do nosso Github. Agora clique no botão "New OAuth App" para criarmos um novo aplicativo OAuth.&lt;/p&gt;

&lt;p&gt;A primeira coisa que precisamos fazer é informar o nome:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh24b81do3ybx5ibh2cc9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh24b81do3ybx5ibh2cc9.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o nome informado agora iremos informar a URL do projeto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzt1s7ag9zoi1x7ztd5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzt1s7ag9zoi1x7ztd5a.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E por último, informar a rota de callback do projet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h9tgwm5pmgwguip7qpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h9tgwm5pmgwguip7qpc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A rota deve ter exatamente essa URL!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agora que os dados necessários já estão devidamente preenchidos clique no botão "Register application".&lt;/p&gt;

&lt;p&gt;Veja que agora obtivemos dois dados importantes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Client ID&lt;/li&gt;
&lt;li&gt;Client secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mão na massa
&lt;/h2&gt;

&lt;p&gt;Agora que já criamos nosso projeto e também criamos um aplicativo OAuth podemos de fato "colocar a mão na massa".&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando variável ambiente
&lt;/h3&gt;

&lt;p&gt;Na raiz de seu projeto, crie o arquivo &lt;code&gt;.env.local&lt;/code&gt;. Esse arquivo será responsável por conter todas as chaves de configurações com serviços externos ao nosso projeto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhh1mohcv4jp0qwfij0wm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhh1mohcv4jp0qwfij0wm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o arquivo criado, vamos criar as variáveis e atribuí-las os seus devidos valores.&lt;/p&gt;

&lt;p&gt;Declare essas duas variáveis em seu arquivo &lt;code&gt;.env.local&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLIENT_ID=
CLIENT_SECRET=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora basta que atribuímos a essas variáveis seus valores de acordo com o Github OAuth: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo2c607ldeyb8c3mupba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo2c607ldeyb8c3mupba.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tendo como resultado final: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft08jm4it8sphimuccpjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft08jm4it8sphimuccpjp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Estruturando página index e aplicando-a estilos
&lt;/h3&gt;

&lt;p&gt;Acesse o arquivo &lt;code&gt;index.tsx&lt;/code&gt; dentro da pasta &lt;code&gt;pages&lt;/code&gt; e vamos estruturar nossa página:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import type { NextPage } from 'next'
import styles from '../styles/Home.module.css'

const Home: NextPage = () =&amp;gt; {
  return (
    &amp;lt;div className={styles.container}&amp;gt;
      &amp;lt;div className={styles.box}&amp;gt;
        &amp;lt;button className={`${styles.button}`}&amp;gt;
          Fazer login
        &amp;lt;/button&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  )
}

export default Home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo &lt;code&gt;global.css&lt;/code&gt; dentro da pasta &lt;code&gt;styles&lt;/code&gt; adicione os seguintes estilos globais:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

:root {
  --white: #fff;
  --gray-100: #e1e1e6;
  --gray-300: #a8a8b3;
  --gray-800: #29292e;
  --gray-850: #212529;
  --gray-900: #121214;
  --green-900: #3e8914;
  --yellow-500: #eba417;
}

@media (max-width: 1080px) {
  html {
    font-size: 93.75%;
  }
}

@media (max-width: 720px) {
  html {
    font-size: 87.5%;
  }
}

body {
  background: var(--gray-900);
  color: var(--white);
  overflow-x: hidden;
}

body,
input,
textarea,
select,
button {
  font: 400 1rem sans-serif;
}

button {
  cursor: pointer;
}

a {
  color: inherit;
  text-decoration: none;
}

ul{
  list-style-type: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo &lt;code&gt;Home.module.css&lt;/code&gt; dentro da pasta &lt;code&gt;styles&lt;/code&gt; adicione os seguintes estilos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.container {
  width: 100%;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

.box {
  padding: 2rem 4rem;
  border-radius: 0.25rem;
  background-color: var(--gray-800);
}

.button {
  padding: 0.5rem 2rem;
  border-radius: 0.25rem;
  background-color: var(--yellow-500);
  border: 0;
  color: var(--gray-800);
  font-size: 1rem;
  transition: 0.2s;
}

.button:hover {
  filter: brightness(0.8);
}



.button.active {
  background-color: var(--green-900);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configurando provedor do Github
&lt;/h3&gt;

&lt;p&gt;Em nosso projeto existe uma pasta chamada &lt;code&gt;api&lt;/code&gt;, essa pasta é responsável por interpretar arquivos do lado do servidor, nela crie uma pasta chamada &lt;code&gt;auth&lt;/code&gt; e dentro dessa pasta, crie o arquivo &lt;code&gt;[...nextauth].ts&lt;/code&gt;. Esse arquivo será responsável pelas configurações de provedores.&lt;/p&gt;

&lt;p&gt;Agora que o arquivo &lt;code&gt;[...nextauth].ts&lt;/code&gt; iremos instalar o pacote de autenticação do Next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add next-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora iremos configurar o provedor do Github em nosso arquivivo &lt;code&gt;[...nextauth].ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import NextAuth from 'next-auth'
import GithubProvider from 'next-auth/providers/github'

export const authOptions = {
  providers: [
    GithubProvider({
      clientId: process.env.CLIENT_ID!,
      clientSecret: process.env.CLIENT_SECRET!
    })
  ]
}

export default NextAuth(authOptions)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Criando contexto de sessão
&lt;/h3&gt;

&lt;p&gt;Em nosso arquivo &lt;code&gt;_app.tsx&lt;/code&gt; dentro da pasta &lt;code&gt;pages&lt;/code&gt;, iremos criar um contexto com a sessão de usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import '../styles/globals.css'
import type { AppProps } from 'next/app'
import { SessionProvider } from 'next-auth/react'
import { Session } from 'next-auth'

function MyApp({
  Component,
  pageProps: { session, ...pageProps }
}: AppProps&amp;lt;{
  session: Session
}&amp;gt;) {
  return (
    &amp;lt;SessionProvider session={session} basePath="/api/auth/callback"&amp;gt;
      &amp;lt;Component {...pageProps} /&amp;gt;
    &amp;lt;/SessionProvider&amp;gt;
  )
}

export default MyApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Consumindo contxto
&lt;/h3&gt;

&lt;p&gt;Agora iremos verificar se nossa sessão está ativa ou não. No arquivo &lt;code&gt;index.tsx&lt;/code&gt; dentro da pasta &lt;code&gt;pages&lt;/code&gt; insira o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import type { NextPage } from 'next'
import { useSession, signIn, signOut } from 'next-auth/react'
import styles from '../styles/Home.module.css'

const Home: NextPage = () =&amp;gt; {
  const { data: session } = useSession()

  return (
    &amp;lt;div className={styles.container}&amp;gt;
      &amp;lt;div className={styles.box}&amp;gt;
        {!session ? (
          &amp;lt;button className={styles.button} onClick={() =&amp;gt; signIn('github')}&amp;gt;
            Fazer login
          &amp;lt;/button&amp;gt;
        ) : (
          &amp;lt;button
            className={`${styles.button} ${styles.active}`}
            onClick={() =&amp;gt; signOut()}
          &amp;gt;
            {session.user?.name}
          &amp;lt;/button&amp;gt;
        )}
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  )
}

export default Home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Finalizando...
&lt;/h2&gt;

&lt;p&gt;Agora que já configuramos tudo iremos testar. O Next recomenda que quando utilizamos variáveis ambiente é sempre importante que reiniciemos o servidor após configura-las, então, vá até o seu terminal, pare o servidor e o suba novamente utilizando o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, se você fez tudo corretamente, agora é só clicar no botão de login e realizar o seu login com o Github!&lt;/p&gt;




&lt;p&gt;Feito com ❤ por &lt;a href="https://www.linkedin.com/in/pablo-caliari-ferrari-32bb7a1a8/" rel="noopener noreferrer"&gt;Pablo Ferrari&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>github</category>
      <category>typescript</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Programação Orientada a Objetos</title>
      <dc:creator>Pablo Ferrari</dc:creator>
      <pubDate>Tue, 21 Dec 2021 11:53:31 +0000</pubDate>
      <link>https://forem.com/pabloferrari013/programacao-orientada-a-objetos-818</link>
      <guid>https://forem.com/pabloferrari013/programacao-orientada-a-objetos-818</guid>
      <description>&lt;p&gt;Para se entender programação orientada a objetos, primeiramente é necessário entender o que é um objeto. Um objeto é uma coisa material ou abstrata que pode ser percebida pelos sentidos e descrita por meio de suas características, comportamentos e estado atual. &lt;/p&gt;

&lt;p&gt;Partindo dessa definição, pode-se afirmar que objetos semelhantes possuem uma mesma classificação, tendo como exemplo de objeto um cachorro que é classificado como animal. Em programação orientada a objetos essa classificação é denominada classe. &lt;/p&gt;

&lt;p&gt;Ao se criar uma nova classe, é preciso que a mesma responda a três perguntas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quais as características do objeto?&lt;/li&gt;
&lt;li&gt;Quais ações esse objeto realiza?&lt;/li&gt;
&lt;li&gt;Qual o estado desse objeto?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Realizando uma analogia com uma caneta obtém-se as seguintes respostas acerca das perguntas a cima:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma caneta possui: modelo, cor, ponta, carga, tamanho, etc.&lt;/li&gt;
&lt;li&gt;Uma caneta pode: escrever, pintar, rabiscar, tampar, destampar, etc.&lt;/li&gt;
&lt;li&gt;Uma caneta está em estado de: 50% de carga,  ponta fina, cor azul, destampada, escrevendo, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nessa linha, segundo a teoria de Programação Orientado a Objetos, as perguntas podem ser entendidas como: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As características do objeto são chamados atributos&lt;/li&gt;
&lt;li&gt;As ações realizadas pelo objeto são chamadas métodos&lt;/li&gt;
&lt;li&gt;A maneira  que o objeto está nesse momento é chamado estado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contudo, pode-se concluir que uma classe age como sendo uma forma na criação dos objetos, onde todo novo objeto irá possuir um padrão predefinido na classe.&lt;/p&gt;

&lt;p&gt;Para criar um novo objeto é preciso instanciar a classe, na qual irá criar um novo objeto a partir do molde da classe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vantagens
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Confiabilidade, o isolamento entre as partes gera software seguro. Ao alterar uma parte, nenhuma outra é afetada.&lt;/li&gt;
&lt;li&gt;Oportuno, ao dividir tudo em partes, várias delas podem ser desenvolvidas em paralelos.&lt;/li&gt;
&lt;li&gt;Manutenível, atualizar um software é mais fácil. Uma pequena modificação vai beneficiar todas as partes que usarem o objeto.&lt;/li&gt;
&lt;li&gt;Extensível, o software não é estático, ele deve crescer para ser útil.&lt;/li&gt;
&lt;li&gt;Reutilizável, podemos usar objetos de um sistema que criamos em um outro projeto futuro.&lt;/li&gt;
&lt;li&gt;Natural, mais fácil de entender. Você se preocupa mais na funcionalidade do que nos detalhes de implementação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Classes vs Objetos
&lt;/h2&gt;

&lt;p&gt;Podemos entender classes e objetos como sendo conceitos interligados, onde um é depende do outro. A respeito das classes, podemos dizer que elas definem os atributos e métodos comuns dos objetos, que por sua vez, um objeto é uma instancia de uma classe. O exemplo a seguir ilustrará bem esses conceitos:&lt;/p&gt;

&lt;p&gt;Imagine que tenhamos em mão uma forma de biscoitos. Essa forma não é um biscoito, no entanto, ela pode ser utilizada para gerar biscoitos. O objetivo dessa forma que assume o papel da classe é gerar biscoitos exatamente iguais, a partir dessa forma, é possível a criação de biscoitos, ou seja, objetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Abstração de Objetos
&lt;/h2&gt;

&lt;p&gt;Pode ser entendida como a simplificação de conceito, ou seja, abstrair apenas o essencial. Abstração é o ato de observar a realidade e dela abstrair ações e características consideras essenciais para uma determinada coisa. Objetos semelhantes possuem atributos semelhantes, no entanto, estados diferentes. O exemplo a seguir ilustrará bem esse conceito:&lt;/p&gt;

&lt;p&gt;Suponhamos que em determinado momento um cliente requeira uma aplicação, onde serão vendidos apenas celulares na web. Tendo em mente que toda a lógica do seu sistema irá girar em torno da venda de celulares, podemos abstrair esse contexto, de modo que retiremos apenas o essencial, tais como o tamanho da tela, o fabricante, o modelo, o preço, entre outros atributos. Perceba que não é necessário abstrair dados como quantos transistores o processador do celular possui, pôs essa informação não é relevante para o cliente. Ademais, podemos abstrair métodos desses celulares, como por exemplo, calcular o frete ou a quantidade em estoque.&lt;/p&gt;

&lt;p&gt;Abstrações não perduram em contextos diferentes, ou seja, a abstração de um  e-commerce de celulares difere de um catálogo de celulares.&lt;/p&gt;

&lt;p&gt;Quando utilizamos programação orientada a objetos, devemos observar as características e os comportamentos de uma determinada entidade, para que possamos absorver essas informações e transforma-las em código.&lt;/p&gt;

&lt;p&gt;Em alguns livros, a abstração é considerada como o primeiro pilar da Programação Orientada a Objetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modificadores de Visibilidade
&lt;/h2&gt;

&lt;p&gt;Os modificadores de visibilidade indicam o nível de acesso aos componentes internos de uma classe, que são: atributos e métodos. A visibilidade irá informar qual o nível de acesso que se tem sobre eles. O exemplo a seguir ilustrará bem esse conceito:&lt;/p&gt;

&lt;p&gt;Imagine um telefone. Podemos ter telefones públicos(popularmente conhecido como orelhão), telefones privados, e telefones protegidos. O que caracteriza um telefone público? Um telefone público é caracterizado como sendo algo que qualquer um pode usar. O que caracteriza um telefone privado? Um telefone privado é caracterizado como sendo algo que apenas o dono pode usar. E por fim, o que seria um telefone protegido? Imagine o telefone fixo da sua residência, apenas os membros da sua família poderão usar o telefone.&lt;/p&gt;

&lt;p&gt;Definição de público, privado e protegido, segundo a Programação Orientada a Objetos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Público:&lt;/strong&gt; todo atributo ou método definido como público ira definir que a classe atual e todas as outras classes possam ter acesso a elas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privado:&lt;/strong&gt; Apenas a classe atual terá acesso aos atributos e métodos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protegido:&lt;/strong&gt; Da acesso aos seus atributos e métodos a sua classe e todas as suas sub-classes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pilares da Programação Orientada a Objetos
&lt;/h2&gt;

&lt;p&gt;Para se entender os pilares da Programação Orientada a objetos, primeiramente é preciso entender o que é um pilar. Pilar é algo que dá sustentação a determinada coisa. Na Programação Orientada a Objetos existem três pilares:&lt;/p&gt;

&lt;h3&gt;
  
  
  Encapsulamento
&lt;/h3&gt;

&lt;p&gt;Encapsular é o ato de ocultar partes da implementação, permitindo construir partes invisíveis ao mundo exterior.&lt;/p&gt;

&lt;p&gt;Um software encapsulado possui um mesmo padrão. A capsula age como uma proteção de dois lados, onde ela protege o código do usuário, e o usuário do código. O usuário não deve ter acesso ao funcionamento de uma classe, mas sim de sua capsula, que por sua vez, uma classe não dever ter acesso ao usuário. &lt;/p&gt;

&lt;p&gt;Exemplificando a teoria:&lt;/p&gt;

&lt;p&gt;Observe uma pilha qualquer. Perceba que a pilha é uma capsula. No interior dessa pilha, estão contidas substâncias químicas que são prejudiciais a saúde. Graças a sua capsula não temos acesso a essas substâncias, mas sim, a energia por ela transmitida. Ademais, não poderíamos ter acesso as substâncias presentes em nessa pilha, devido elas serem prejudiciais, e a possibilidade de nós corrompermos seu funcionamento.&lt;/p&gt;

&lt;h4&gt;
  
  
  Relacionamento entre classes
&lt;/h4&gt;

&lt;p&gt;O relacionamento entre classes como próprio nome propriamente diz, consiste em relacionar uma classe com outra. &lt;/p&gt;

&lt;p&gt;Exemplo de relacionamento:&lt;/p&gt;

&lt;p&gt;Suponhamos que tenhamos uma classe caneta. Agora imagine que tenhamos várias canetas resultantes dessa classe caneta, ou seja, vários objetos que foram criados a partir dessa classe. Esse montante de objetos criados pode formar outra classe, onde tenham atributos como: quantidade, cor e preço; E os métodos: vender, comprar e pegarQuantidadeNoEstoque.&lt;/p&gt;

&lt;p&gt;Perceba que no exemplo acima, uma nova classe foi criada a partir dos objetos gerados por uma outra classe, isso é relacionamento entre classes.&lt;/p&gt;

&lt;p&gt;Podemos ter os seguintes relacionamentos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relacionamento de Agregação:&lt;/strong&gt; É um tipo especial de associação onde tenta-se demonstrar que as informações de um objeto (chamado objeto-todo) precisam ser complementados pelas informações contidas em um ou mais objetos de outra classe (chamados objetos-parte); conhecemos como todo/parte.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relacionamento de Associação:&lt;/strong&gt; é o relacionamento entre duas classes independentes que em determinado momento se relacionam, ou seja, as classes se relacionam porém não depende umas das outras para existir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relacionamento de Composição:&lt;/strong&gt; é o relacionamento onde há dependência entre as classes, onde se uma classe progenitora deixar de existir, o filho também deixara de existir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relacionamento de Generalização:&lt;/strong&gt; é o relacionamento onde classes compartilham estados e comportamentos, ou seja, métodos e atributos. Define uma hierarquia de abstrações em que uma subclasse herda classes de uma ou mais classes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Vantagens do Encapsulamento
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Torna mudanças invisíveis.&lt;/li&gt;
&lt;li&gt;Facilita a reutilização de código.&lt;/li&gt;
&lt;li&gt;Reduz efeitos colaterais.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Interface no Encapsulamento
&lt;/h4&gt;

&lt;p&gt;No que diz respeito a visibilidade, pode-se afirmar que ela possui uma ligação com o encapsulamento, onde para que o encapsulamento funcione de maneira eficaz e correta, é preciso que aja um canal de comunicação. Esse canal de comunicação no encapsulamento é chamado interface. Sendo assim, um bom objeto encapsulado possui uma interface bem definida. &lt;/p&gt;

&lt;p&gt;Em outras palavras, interface, é uma lista de serviços fornecidos por um componente. É o contato com o mundo exterior, que permite o que pode ser feito com um objeto dessa classe.&lt;/p&gt;

&lt;p&gt;Nessa linha, segundo a teoria de encapsulamento, na Programação Orientado a Objetos e o exemplo citado no tópico de encapsulamento, seus conceitos podem ser entendidos como: A pilha sendo a capsula e os polos da pilha sendo a interface&lt;/p&gt;

&lt;p&gt;Estão presentes na composição de uma interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Métodos abstratos ou sobrescritos:&lt;/strong&gt; Qualquer classe que herda um método de uma superclasse tem a oportunidade de sobrescrever o método. O benefício de sobrepor é a capacidade de definir um comportamento que é específico para um tipo de subclasse particular.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Método construtor:&lt;/strong&gt; Tem a função de preparar o objeto para o usuário usar depois, ou seja são métodos especiais chamados pelo sistema no momento da criação de um objeto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Métodos Get e Set:&lt;/strong&gt; Responsáveis pelo gerenciamento sobre o acesso aos atributos. Esse método determina quando será alterado um atributo e o acesso ao mesmo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Métodos de Usuário:&lt;/strong&gt; Dentro da classe, declaramos o que cada objeto faz e como é feito. Irei usar como exemplo a classe Conta, onde simulamos uma conta de banco. Os métodos de usuário definem como um depósito ou um saque serão feitos. As funções que realizam isso, são chamadas de Métodos de Usuário.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando encapsulamos um objeto, em seu princípio, é de suma importância que aderimos a um conceito muito importante: torne todos os atributos privados, para que haja uma proteção da parte interna do objeto, fazendo com que, meios externos não possam interagir com seus atributos.&lt;/p&gt;

&lt;p&gt;Para se utilizar a interface, é preciso que a mesma esteja implementada na classe. Para implementar, baste que na criação da classe, após seu nome, adicione a palavra implements e o nome da interface. Caso em sua interface estejam declarados métodos estáticos, é obrigatório que sobrescreva-os na classe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Herança
&lt;/h3&gt;

&lt;p&gt;A herança permite basear uma nova classe na definição de uma outra classe previamente existente, podendo basear-se tanto nas características quanto nos comportamentos. Existem definições para essa situação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A classe que se baseia em uma outra classe é conhecida como classe filha, ou subclasse.&lt;/li&gt;
&lt;li&gt;A classe que se é  baseada é conhecida como classe mãe, superclasse, ou progenitora.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplificando a teoria:&lt;/p&gt;

&lt;p&gt;Utilizando novamente a analogia da caneta, imagine que se tenha uma classe de criação de canetas. Em determinado momento, se faz necessário a criação de uma nova caneta com características e ações semelhantes a primeira, no entanto, com algumas melhorias. É nesse contexto que a herança se encaixa. Basta que a classe de criação da caneta melhorada herde os atributos e métodos da caneta simples e após isso defina novos atributos e métodos conforme sua necessidade.&lt;/p&gt;

&lt;p&gt;Agora imagine que em uma escola qualquer tenham alunos, professores e funcionários, e é preciso criar uma classe para cada um. Eles irão possuir as seguintes características e comportamentos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aluno:

&lt;ul&gt;
&lt;li&gt;Características:

&lt;ul&gt;
&lt;li&gt;nome&lt;/li&gt;
&lt;li&gt;idade&lt;/li&gt;
&lt;li&gt;sexo&lt;/li&gt;
&lt;li&gt;matrícula&lt;/li&gt;
&lt;li&gt;sexo&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Comportamentos:

&lt;ul&gt;
&lt;li&gt;fazer aniversário&lt;/li&gt;
&lt;li&gt;cancelar matrícula&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Professor:

&lt;ul&gt;
&lt;li&gt;Características:

&lt;ul&gt;
&lt;li&gt;nome&lt;/li&gt;
&lt;li&gt;idade&lt;/li&gt;
&lt;li&gt;sexo&lt;/li&gt;
&lt;li&gt;especialidade&lt;/li&gt;
&lt;li&gt;salário&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Comportamentos:

&lt;ul&gt;
&lt;li&gt;fazer aniversário&lt;/li&gt;
&lt;li&gt;receber aumento&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Funcionário

&lt;ul&gt;
&lt;li&gt;Características

&lt;ul&gt;
&lt;li&gt;nome&lt;/li&gt;
&lt;li&gt;idade&lt;/li&gt;
&lt;li&gt;sexo&lt;/li&gt;
&lt;li&gt;setor&lt;/li&gt;
&lt;li&gt;trabalhando&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Comportamentos

&lt;ul&gt;
&lt;li&gt;fazer aniversário&lt;/li&gt;
&lt;li&gt;mudar de emprego&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perceba que algumas características e comportamentos se repetem entre eles, então basta que se crie uma quarta classe chamada pessoa, que irá possuir todas as características e comportamentos comuns entre eles. A partir daqui, as classes aluno, professor e funcionário irão herdar as características e comportamento da classe pessoa. &lt;/p&gt;

&lt;h4&gt;
  
  
  Navegação Hierárquica
&lt;/h4&gt;

&lt;p&gt;A navegação hierárquica consiste na representação das hierarquias das classes, onde uma classe independente que não seja herdeira é herdada por outras classes, que por sua vez, podem ser herdadas por outras classes. Esse processo se repete conforme a necessidade do projeto, podendo haver inúmeras classes mães e filhas. &lt;/p&gt;

&lt;p&gt;Quando a navegação é feita de de cima para baixo ela é chamada especificação, quando ela é feita de baixo para cima ela é chamada de generalização.&lt;/p&gt;

&lt;p&gt;Essa navegação hierárquica pode ser entendi  da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A base dessa hierarquia será a classe independente que não é herdeira.&lt;/li&gt;
&lt;li&gt;Haverão sempre classes filhas, ou seja, classes que herdem de outra classe.&lt;/li&gt;
&lt;li&gt;Haverão sempre classes mães, ou seja, classes que são herdadas por outras classes.&lt;/li&gt;
&lt;li&gt;Podem haver classes descendentes, que são classes duas hierarquias abaixo de outra classe, sendo assim, neta.&lt;/li&gt;
&lt;li&gt;Podem haver classes ancestrais, que são classes duas hierarquias acima de outra classe, sendo assim, avó.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tipos de Herança
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Herança de implementação:&lt;/strong&gt; herda atributos e métodos de outra classe, no entanto ela não possui seus próprios atributos e métodos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Herança para diferença:&lt;/strong&gt; herda atributos e métodos de outra classe, além de possuir seus próprios atributos e métodos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Polimorfismo
&lt;/h3&gt;

&lt;p&gt;A noção de polimorfismo refere-se àquilo que dispõe ou que pode adoptar múltiplas formas. O termo também faz referência a uma propriedade capaz de atravessar numerosos estados.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tipos de Polimorfismo
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sobreposição:&lt;/strong&gt; quando um método da classe mãe é sobreposto nas classes filhas, ou seja, substituído ou modificada. Para se obter a sobreposição de um método, é preciso que ele tenha a mesma assinatura(quantidade de atributos e os tipos dos atributos que serão passados no parâmetro do método) e estejam em classes diferentes.&lt;/p&gt;

&lt;p&gt;Para que a sobreposição seja realizada é preciso que um método abstrato seja criado na classe mãe e o mesmo seja sobreposto nas classes filhas. A sobreposição só pode ocorrer uma vez em cada classe filha.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sobrecarga:&lt;/strong&gt; consiste em modificar um método da classe mãe através da classe filha, buscando se obter vários resultados diferentes a partir de suas assinaturas(quantidade de atributos e os tipos dos atributos que serão passados no parâmetro do método).&lt;/p&gt;

&lt;p&gt;A modificação do método deve ocorrer mais de uma vez em uma única classe filha, desde que suas assinaturas estejam diferentes umas das outras.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Abstrato e Afim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classe abstrata:&lt;/strong&gt; não pode ser instanciada. Só pode servir como progenitora.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Método abstrato:&lt;/strong&gt; declarado, mas não implementado na progenitora.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classe final:&lt;/strong&gt; não pode ser herdada por outra classe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Método final:&lt;/strong&gt; não pode ser sobrescrito por suas subclasses. Obrigatoriamente herdado.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Obrigado pela leitura ❤️&lt;/p&gt;

&lt;p&gt;Linkedin: &lt;a href="https://www.linkedin.com/in/pablo-caliari-ferrari-32bb7a1a8/"&gt;https://www.linkedin.com/in/pablo-caliari-ferrari-32bb7a1a8/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/PabloFerrari013"&gt;https://github.com/PabloFerrari013&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>oop</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Criando e configurando projeto Node.Js com TypeScript</title>
      <dc:creator>Pablo Ferrari</dc:creator>
      <pubDate>Tue, 23 Nov 2021 23:15:00 +0000</pubDate>
      <link>https://forem.com/pabloferrari013/criando-e-configurando-projeto-nodejs-com-typescript-30lj</link>
      <guid>https://forem.com/pabloferrari013/criando-e-configurando-projeto-nodejs-com-typescript-30lj</guid>
      <description>&lt;h2&gt;
  
  
  Requisitos necessários
&lt;/h2&gt;

&lt;p&gt;Para iniciarmos a criação de nosso  projeto, precisaremos desses componentes instalados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/yarn"&gt;yarn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preparando ambiente
&lt;/h2&gt;

&lt;p&gt;Em algum lugar de sua preferência, crie uma pasta e a abra em seu editor de código. No terminal, navegue até a pasta e rode o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos observar que o arquivo packge.json foi criado na raiz de seu projeto, onde estão contidos dados como o nome de seu projeto, a versão, o arquivo principal, a licença e futuramente conterá as dependências. &lt;/p&gt;

&lt;h2&gt;
  
  
  Configurando o projeto
&lt;/h2&gt;

&lt;p&gt;No terminal, baixe a dependência de desenvolvimento do TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add typescript &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos observar que uma pasta chamada node_modules foi criada, ela é responsável por armazenar os módulos de dependências de seu projeto.&lt;/p&gt;

&lt;p&gt;No terminal, inicie o TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn tsc &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos observar que o arquivo tsconfig.json foi criado na raiz do seu projeto, esse arquivo como próprio nome já diz, é responsável pelas configurações do TypeScript. &lt;strong&gt;Dentro do arquivo, altere a propriedade strict para true&lt;/strong&gt;. O strict é uma propriedade do js que insere algumas checagens no código. Como faremos essas checagens com o ts, desabilitaremos o strict.&lt;br&gt;
Na raiz de seu projeto, &lt;strong&gt;crie uma pasta chamada src com um arquivo server.ts dentro dela&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Baixando Express.js
&lt;/h2&gt;

&lt;p&gt;O Express é um framework incrível e possui diversas características que facilitam o desenvolvimento de nossas aplicações. Dentre suas principais características, podemos citar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possui um sistema de rotas completo;&lt;/li&gt;
&lt;li&gt;Possibilita o tratamento de exceções dentro da aplicação;&lt;/li&gt;
&lt;li&gt;Permite a integração de vários sistemas de templates que facilitam a criação de páginas web para suas aplicações;&lt;/li&gt;
&lt;li&gt;Gerencia diferentes requisições HTTP com seus mais diversos verbos;&lt;/li&gt;
&lt;li&gt;Feito para a criação rápida de aplicações utilizando um conjunto pequeno de arquivos e pastas;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No terminal, baixe o Express e sua tipagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add express
&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add @types/express &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo server.ts, importe o Express:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inicialize o Express:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie o servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server is running&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Biuld automático
&lt;/h2&gt;

&lt;p&gt;O bild da sua aplicação irá converter seu código TypeScript para js, para que seu código seja interpretado pelo node.&lt;br&gt;
No terminal, instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add ts-node-dev &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo pakage.json crie o script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ts-node-dev src/server.ts"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salve todos os seus arquivos e no terminal rode o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se no seu console foi retornado a mensagem: Server is running, parabéns ocorreu tudo certo!&lt;/p&gt;

&lt;p&gt;Obrigado pela leitura! Feito com ❤️ by &lt;a href="https://github.com/PabloFerrari013"&gt;Pablo Ferrari&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>node</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
