FullStack - HTML, CSS, JavaScript, Bootstrap, Node.
1 - INTRODUÇÃO AO PROJETO
Lista de tarefas
- Lista de tarefas
- Uma aplicação frontend com HTML, CSS e JS puro para gerir tarefas
- No backend vamos ter uma API NodeJS + Express +MySQL para servir o frontend
Ferramentas do programador
- Browser (Google Chrome)
- Visual Studio Code
- Laragon
- HeidiSQL
Base de dados
-
Base de dados
- id
- username
- password
- created_at
- updated_at
tasks
- id
- id_user
- task_text
- task_status (new | in progress | canceled | done)
- created_at
- updated_at
Tarefas a desenvolver no projeto
- Criar a estrutura inicial
- Base do frontend (html css js | bootstrap)
- Base do backend (node + express + mysql) com uma resposta padrão
Frontend
-
No frontend
- Páginas necessárias para a navegação na nossa app
- Pequenos testes de comunicação entre frontend e backend - utilização de Ajax (XMLhttprequest | fetchAPI)
-
Exemplo
2 - PREPARAÇÃO DA ESTRUTURA INICIAL DO FRONTEND
Font Awesome
Bootstrap
3 - ORGANIZAÇÃO DO LAYOUT DA PÁGINA PRINCIPAL PARTE 1
Font Awesome
Favicon
Emmet abbreviation
-
Teclas de atalho VSCode
-
Exemplo 1
<!-- comando/atalho
.container.mt-5>.row>(.col)*2
-->
<!-- Resultado -->
<div class="container mt-5">
<div class="row">
<div class="col"></div>
<div class="col"></div>
</div>
</div>
<!-- comando/atalho
.row>.col.text-center
-->
<!-- Resultado -->
<div class="row">
<div class="col text-center"></div>
</div>
Bootstrap
4 - ORGANIZAÇÃO DO LAYOUT DA PÁGINA PRINCIPAL PARTE 2
Emmet abbreviation
-
Teclas de atalho VSCode
-
Exemplo 3
<!-- comando/atalho
div.row>div.col-12
-->
<!-- Resultado -->
<div class="row">
<div class="col-12"></div>
</div>
<!-- comando/atalho
div.row>(div.col)*4
-->
<!-- Resultado -->
<div class="row">
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
</div>
Bootstrap
Font Awesome
5 - FINALIZAÇÃO DO LAYOUT DA PÁGINA PRINCIPAL
Font Awesome
Emmet abbreviation
-
Teclas de atalho VSCode
-
Exemplo 5
<!-- comando/atalho
div.row>div.col>h4>span.text-info
-->
<!-- Resultado -->
<div class="row">
<div class="col">
<h4><span class="text-info"></span></h4>
</div>
</div>
<!-- comando/atalho
div.row>div.col.text-center
-->
<!-- Resultado -->
<div class="row">
<div class="col text-center">
</div>
</div>
6 - CONSTRUÇÃO DA BASE DE DADOS
/*Tabela users (usuários)*/
CREATE TABLE `users` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`password` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
/*Tabela tasks*/
CREATE TABLE `tasks` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_user` INT(11) NULL DEFAULT NULL,
`task_text` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`task_status` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
7 - FINALIZAÇÃO DOS LAYOUTS RESTANTES
Emmet abbreviation
-
Teclas de atalho VSCode
-
Exemplo 3
<!-- comando/atalho
div.row>div.col
-->
<!-- Resultado -->
<div class="row">
<div class="col">
</div>
</div>
8 - CRIAÇÃO DO SERVIDOR NODEJS + EXPRESS + MYSQL
Backend
- Backend
- Criar um servidor NodeJS + Express + MySQL
- Criar um endpoint inicial - teste de comunicações
Express
npm install express
MySQL
npm install mysql
Executar o backend
node --watch server.js
/*Server.js*/
const express = require('express');
const mysql = require('mysql');
// Opções de conexão com o MySQL
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'fullstack_stack_db'
});
const app = new express();
app.listen(3000, () => {
console.log("Servidor iniciado na porta: http://localhost:3000");
});
// Rotas
app.get("/", (req, res) => {
connection.query("SELECT COUNT(*) users FROM users", (err, results) => {
if(err){
res.send(err.message);
}
res.send(results);
});
});
9 - REQUISIÇÃO DE AJAX E ERRO DE CORS
Backend
node --watch server.js
Access to fetch at 'http://localhost:3000/user/1' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled
O acesso para buscar em 'http://localhost:3000/user/1' da origem 'nulo' foi bloqueado pela política do CORS: Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado. Se uma resposta opaca atender às suas necessidades, defina o modo da solicitação como 'no-cors' para buscar o recurso com o CORS desativado
10 - RESOLUÇÃO DO ERRO DE CORS
Backend
node --watch server.js
Cross-origin resource sharing
Cors
npm install cors
11 - REQUISIÇÕES DAS TAREFAS
Font-Awesome
Backend
node --watch server.js
12 - APRESENTAÇÃO DAS TAREFAS
node --watch server.js
13 - RESOLUÇÃO DE ERRO DO EXERCÍCIO ANTERIOR
node --watch server.js
14 - LINK PARA EDITAR A TASK
node --watch server.js
HTML Data Attributes
-
Using data attributes
-
Exemplo
15 - LINK PARA ELIMINAR A TASK E AJUSTAMENTOS DE CORES
node --watch server.js
16 - PREPARAÇÃO DO SISTEMA PARA ATUALIZAÇÃO DO STATUS - PARTE 1
node --watch server.js
17 - PREPARAÇÃO DO SISTEMA PARA ATUALIZAÇÃO DO STATUS - PARTE 2
node --watch server.js
-
id_user
-
id_task
-
status
-
Exemplo
18 - PREPARAÇÃO DO SISTEMA PARA ATUALIZAÇÃO DO STATUS - PARTE 3
node --watch server.js
19 - ATUALIZAÇÃO DAS CORES APÓS ATUALIZAÇÃO DO STATUS
node --watch server.js