Skip to content

Latest commit

 

History

History
256 lines (174 loc) · 5.68 KB

README.md

File metadata and controls

256 lines (174 loc) · 5.68 KB

GitHub language count Repository size GitHub last commit

🚀 NLW Together #6

O NLW é um evento online e gratuito, oferecido pela Rocketseat, com duração de uma semana. Durante o evento, diversos conteúdos de programação, com projetos para serem desenvolvidos, são disponibilizados para a comunidade. Todo o conteúdo do evento é dividido em diferentes trilhas de aprendizado, cada uma abordando uma tecnologia diferente.

📌 Sobre o projeto

Neste projeto, esta sendo desenvolvido uma aplicação back-end da trilha Node.js.

O NLW VALORIZA é uma aplicação onde será possível fazer e retribuir elogios. Pode ser aplicado, por exemplo, em um ambiente de trabalho, realizando elogios aos colegas.

Esse projeto contemplará:

  • Cadastros de usuários
  • Cadastros de tags (possíveis elogios)
  • Cadastros de elogios
  • Autenticação de usuário
    • Gerar token JWT
    • Validar usuários logados
  • Listar usuários, tags e elogios

⚡ Tecnologias utilizadas

  • Node
  • Express
  • TypeScript
  • Typeorm
  • JWT Authentication
  • BCrypt password hashing

🖥️ Configuração do ambiente

As instruções de preparação do ambiente estão neste Notion.

📌 Criando um projeto node

Primeiro abra o terminal dentro da pasta de onde o projeto será criado. Em seguida iremos criar o projeto utilizando o npm com o seguinte comando:

npm init

Esse comando vai criar o arquivo package.json, que é onde está toda a configuração do projeto, incluindo, nome, versão, descrição, scripts a serem executados, licença, etc.

Após executar o npm init, o npm vai perguntar algumas informações básicas para montar o package.json.

Mais intruções podem ser contradas nesta fonte.

📌 Instalação de dependências e configurações

TypeScript

https://www.npmjs.com/package/typescript

npm i typescript -D
npx tsc --init

Alterar a propriedade strict para false no arquivo tsconfig.ts que foi criado.

Dependência de desenvolvimento

Será uma biblioteca responsável por converter o código em typescript para uma forma que o Node consiga entender.

npm i ts-node-dev -D

Acrescentar o script no package.json para executar a aplicação:

"scripts": {
    "dev": "ts-node-dev src/server.ts",
  }

Agora a aplicação será executada com o comando:

npm run dev

Express

https://expressjs.com/pt-br/

npm i express
npm i @types/express -D
npm i express-async-errors

Typeorm + Postgres

https://typeorm.io/

npm install typeorm --save
npm install reflect-metadata --save
npm install pg --save

Adicionar o seguinte import no arquivo server.ts:

import "reflect-metadata";

Para configurar a conexão com o Postgres, usamos um arquivo ormconfig.json:

{
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "postgres",
  "password": "admin",
  "database": "nlwvaloriza"
}

A conexão é iniciada definindo um arquivo de configuração dentro de src/database/index.ts:

import { createConnection } from "typeorm";
createConnection();

Em seguida adicionamos o import no server.ts:

import "./database";

Adicionando migrations

Dentro de ormconfig.json iremos adicionar:

  "migrations": ["src/database/migrations/*.ts"],
  "cli": {
    "migrationsDir": "src/database/migrations"
  }

Adicionar o script em package.json:

  "scripts": {
    "typeorm": "ts-node-dev ./node_modules/typeorm/cli.js"
  }

Instalar ts-node globalmente, caso os comandos de criar migration abaixo não funcionarem:

npm install -g ts-node

Para criar migration:

npm rum typeorm migration:create -n CreateUser

Ou então:

npx typeorm migration:create -n CreateUser

Para executar uma migration, utilizar o comando:

npm run typeorm migration:run

Para reverter uma migration:

npm run typeorm migration:revert

Criando entidades com typeorm

Adicionar o local onde as entidades serão criadas no arquivo ormconfig.json:

  "entities": ["src/entities/*.ts"],
  "cli": {
    "entitiesDir": "src/entities"
  }

Para criar a entidade:

npx typeorm entity:create -n User

Para trabalhar com decorators, será necessário descomentar a seguinte parte do código no arquivo tsconfig.json:

"emitDecoratorMetadata": true,
"experimentalDecorators": true,

Também descomentar a seguinte propriedade e alterar para false, para que não fique apontando erro de inicialização de atributos, já que a inicialização será feita de uma outra forma.

"strictPropertyInitialization": false

Token JWT

Gerar token para autenticar o usuário do sistema.

https://jwt.io/

https://www.npmjs.com/package/jsonwebtoken

npm i jsonwebtoken
npm i @types/jsonwebtoken -D

BCrypt js

Para criptografar senhas.

https://www.npmjs.com/package/bcryptjs

npm i bcryptjs
npm i @types/bcryptjs

Class-transformer

Biblioteca que nos permiter sobrescrever atributos das entidades que serão exibidos. Dessa forma é possível "esconder" informações críticas.

https://github.com/typestack/class-transformer

npm i class-transformer