Skip to content

Criando conexão com MySQL + TypeScript e utilizando minha API REST para fazer as quatro operações básicas de manipulação de dados. Aprenda a conectar seu MySQL e fique a vontade para estudar o código

License

Notifications You must be signed in to change notification settings

henrygoncalvess/CRUD_MySQL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CRUD com MySQL

Criando conexão com MySQL + TypeScript e utilizando minha API REST para fazer as quatro operações básicas de manipulação de dados. Aprenda a conectar seu MySQL e fique a vontade para estudar o código


licença e tecnologias utilizadas:

Insalador de pacotes:

Dependências NPM:

Ponto de Entrada:

Caminho:


Tabela de Conteúdos

---
title:  Estrutura de pastas
---
flowchart LR
    crud("📁 _CRUD_MySQL_")@{ shape: processes }
    crud --o build("📁 _build_")@{ shape: processes }
    crud ---o src("📁 _src_")@{ shape: processes }
    src --o config("📁 _config_")@{ shape: processes }
    config --- db.ts("📄 **db.ts**")@{ shape: card }
    src --o controllers("📁 _controllers_")@{ shape: processes }
    controllers --- UserController.ts("📄 **UserController.ts**")@{ shape: card }
    src --o models("📁 _models_")@{ shape: processes }
    models --- UserModel.ts("📄 **UserModel.ts**")@{ shape: card }
    src --o routes("📁 _routes_")@{ shape: processes }
    routes --- Users.ts("📄 **Users.ts**")@{ shape: card }
    src --- app.ts("📄 **app.ts**")@{ shape: card }
    src --- server.ts("📄 **server.ts**")@{ shape: card }
    env("⚙️ .env")

    %%CLASSES
    classDef default fill:#191919,color:white;
    
    classDef pasta fill:#403211,stroke:#c99e34,stroke-width:2px,color:#fff1cc;
    classDef envStyle fill:#000000,stroke:#000000,color:gray;

    %%aplicação de classes
    class crud,src,config,controllers,models,routes,build pasta
    class env envStyle



    %%LINKS
    
    %%pastas
    linkStyle 0,1,3,5,7 stroke:#f2c04b

    %%arquivos
    linkStyle default stroke-width:2px;

    click build "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/build"
    click src "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src"
    click config "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/config"
    click db.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/config/db.ts"
    click controllers "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/controllers"
    click UserController.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/controllers/UserController.ts"
    click models "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/models"
    click UserModel.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/models/UserModel.ts"
    click routes "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/routes"
    click Users.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/routes/Users.ts"
    click app.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/app.ts"
    click server.ts "https://github.com/henrygoncalvess/CRUD_MySQL/tree/main/src/server.ts"
Loading

Instrução de instalação

Pré-requisitos

Para a instalação dos frameworks, middlewares e dependências que possibilitaram a criação da API
e a conexão com o MySQL é necessário que você possua as seguintes ferramentas:

Para fazer requisições e testar a conexão com o banco:

Tip

Também é possível fazer requisições pela linha de comando.
Clique aqui para aprender a fazer requisições pelo terminal


Clonando Repositório

No Terminal, certifique de que você está na pasta onde vai ficar o repositório

repositorios\clonados

git clone https://github.com/henrygoncalvess/CRUD_MySQL.git

Configuração do Projeto

1. Inicialize o projeto Node.js

repositorios\clonados\CRUD_MySQL

npm init

2. Adicione os seguintes scripts ao package.json:

repositorios\clonados\CRUD_MySQL\package.json

"scripts": {
   "dev": "ts-node-dev --inspect --transpile-only --ignore-watch node_modules src/server.ts",
   "start": "node build/server.js",
   "build": "tsc"
}

3. em seguida, instale as dependências necessárias para o funcionamento do projeto.

repositorios\clonados\CRUD_MySQL

npm install cors@2.8.5 mysql2@3.11.3 dotenv@16.4.5 express@4.21.1
npm install --save-dev typescript@5.7.2 @types/node @types/express @types/cors ts-node

4. Inicialize o TypeScript e configure o arquivo tsconfig.json.

repositorios\clonados\CRUD_MySQL

npx tsc --init

5. Atualize o tsconfig.json com as seguintes configurações básicas:

este padrão de arquivo typescript está de acordo com esta documentação
baseado na versão node utilizada

repositorios\clonados\CRUD_MySQL\tsconfig.json

{
  "$schema": "https://json.schemastore.org/tsconfig",
  "display": "Node 22",
  "_version": "22.0.0",

  "compilerOptions": {
    "lib": ["es2023"],
    "module": "node16",
    "target": "es2022",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "moduleResolution": "node16",
    "rootDirs": ["./src"],
    "outDir": "./build",
    "removeComments": true,
    "forceConsistentCasingInFileNames": true,
  }
}

6. crie o arquivo .env na raiz do projeto - repositorios\clonados\CRUD_MySQL, e configure as variáveis de acordo com seus dados do MySQL.

HOST=seu_host #exemplo: localhost
USER=seu_usuario #exemplo: root
PASSWORD=sua_senha
DB=nome_do_seu_database
TABLE=sua_tabela

Instrução de uso

1. Compile o código TypeScript para JavaScript.

repositorios\clonados\CRUD_MySQL

npm run build

Inicie o servidor local e veja Endpoints do CRUD para testar as respostas do banco

repositorios\clonados\CRUD_MySQL

npm run start

Endpoints do CRUD

No Postman ou na linha de comando
teste as respostas da conexão com o MySQL seguindo os endpoints abaixo.

Tip

acesse este link, caso não saiba utilizar o Postman para fazer requisições Postman
acesse este link, caso não saiba fazer requisições pela linha de comando Clique aqui


Rota Descrição
GET http://localhost:3000/api/user Lista todas as informações da tabela - ver JSON
POST http://localhost:3000/api/new/user Adiciona um novo item na tabela - ver JSON
PUT http://localhost:3000/api/update/user Atualiza as informações da tabela - ver JSON
DELETE http://localhost:3000/api/delete/user Deleta uma linha da tabela - ver JSON

Exemplo de Banco de Dados

+------------+---------------+------+---------+ +-----------+------------+------+------+
| Field      | Type          | Null | Default | | nome      | nascimento | sexo | peso |
+------------+---------------+------+---------+ +-----------+------------+------+------+
| nome       | varchar(30)   | NO   | NULL    | | Miguel    | 2004-10-29 | M    | 55.3 |
| nascimento | date          | NO   | NULL    | | Pedro     | 2001-02-04 | M    | 80.9 |
| sexo       | enum('M','F') | NO   | NULL    | | Valentina | 1989-04-07 | F    | 62.1 |
| peso       | float         | YES  | NULL    | +-----------+------------+------+------+
+------------+---------------+------+---------+

GET - Response

[
  {
    "nome": "Pedro",
    "nascimento": "2000-01-04T02:00:00.000Z",
    "sexo": "M",
    "peso": 80
  },
  {
    "nome": "Valentina",
    "nascimento": "1989-04-07T03:00:00.000Z",
    "sexo": "F",
    "peso": 62.1
  }
]

POST - Request

nome, nascimento e sexo são obrigatórios

{
    "nome": "novo usuario",
    "nascimento": "2021-11-01",
    "sexo": "M"
}

Response

{
    "fieldCount": 0,
    "affectedRows": 1,
    "insertId": 0,
    "info": "",
    "serverStatus": 2,
    "warningStatus": 0,
    "changedRows": 0
}

PUT - Request

linha atual

+-------+------------+
| nome  | nascimento |
+-------+------------+
| Pedro | 2001-02-04 |
+-------+------------+

Request

"usuario": parâmetro para localizar a linha que será alterada.
informar apenas os parâmetros a serem alterados

{
    "usuario": "Pedro",
    "nascimento": "1999-09-09"
}

Response

{
    "fieldCount": 0,
    "affectedRows": 1,
    "insertId": 0,
    "info": "Rows matched: 1  Changed: 1  Warnings: 0",
    "serverStatus": 34,
    "warningStatus": 0,
    "changedRows": 1
}

linha alterada

+-------+------------+
| nome  | nascimento |
+-------+------------+
| Pedro | 1999-09-09 |
+-------+------------+

DELETE - Request

linha atual

+--------------+------------+------+------+
| nome         | nascimento | sexo | peso |
+--------------+------------+------+------+
| Miguel       | 2004-10-29 | M    | 55.3 |
| Pedro        | 1999-09-09 | M    | 80.9 |
| Valentina    | 1989-04-07 | F    | 62.1 |
| novo usuario | 2021-11-01 | M    | 66.4 |
+--------------+------------+------+------+

Request

"usuario": parâmetro para localizar a linha que será deletada

{
    "usuario": "novo usuario"
}

Response

[
  {
    "fieldCount": 0,
    "affectedRows": 1,
    "insertId": 0,
    "info": "",
    "serverStatus": 34,
    "warningStatus": 0,
    "changedRows": 0
  },
  null
]

linha alterada

+-----------+------------+------+------+
| nome      | nascimento | sexo | peso |
+-----------+------------+------+------+
| Miguel    | 2004-10-29 | M    | 55.3 |
| Pedro     | 1999-09-09 | M    | 80.9 |
| Valentina | 1989-04-07 | F    | 62.1 |
+-----------+------------+------+------+

About

Criando conexão com MySQL + TypeScript e utilizando minha API REST para fazer as quatro operações básicas de manipulação de dados. Aprenda a conectar seu MySQL e fique a vontade para estudar o código

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published