- Criar pasta backend
- Dentro dela dar um
yarn init
- instalar
yarn add express
express: micro framework do node.js, para gerenciar as rotas
- Criar pasta
src/
- Criar
src/server.js
(arquivo de entrada)
-
importar a lib express:
const express = require('express');
O express é uma função, que quando chamada ela cria um novo servidor. Um novo servidor é basicamente uma nova porta de entrada que a gente pode receber requisições e retornar respostas.
-
Criar um servidor utilizando a função
express()
const server = express();
A partir deste momento, já temos um servidor do express, mas por enquanto ele não está ouvindo nenhum endereço. Logo não tem como acessar ele utilizando
localhost:porta
ou algo do tipo. -
Criar a porta que o servidor irá ouvir:
server.listen(3333);
Com a porta criada, pode acessar
localhost:3333
, porém não retornará nada, pois não existe nenhuma trativa de rota, o servidor ainda não sabe como lidar com as requisições que vem através de um navegador ou aplicativo. -
Criar uma trativa de rota na raiz
server.get('/',(req, res)=>{ });
-
Utilizar o método
get()
pois sempre quando um navegador faz uma chamada em alguma rota, ele faz utilizando GET. -
req
: ela trás todas as informações que são referentes à requisição do usuário. Comolocalhost:3333?nome=
Oscar
, é na requisição que estará essa informação. -
res
: Objeto que será utilizado para retornar uma resposta para o cliente.
- GET - Utilizado para buscar alguma informação da API.
- POST - Utilizado para criar algum tipo de registro dentro da API.
- PUT - Utilizado para editar. (não é possível utilizar esse pelo HTML)
- DELETE - Utilizado para deletar. (não é possível utilizar esse pelo HTML)
-
-
Adicionar o comando
return res.send('Hello World');
dentro da função anônima. -
Dentro da pasta backend, rodar o servidor com
node src/server.js
e no navegador acessarlocalhost:3333
. Deve aparecer o Hello worldserver.js
const express = require('express'); const server = express(); server.get('/',(req, res)=>{ return res.send('Hello World'); }); server.listen(3333);
-
Adicionar o comando
return res.send(`Hello ${req.query.name}`);
dentro da função anônima.query
: contém todos os parâmetros que são envidados na url.
-
Reiniciar o node e no navegador digitar
localhost:3333/?name=Oscar
server.js
const express = require('express'); const server = express(); server.get('/', (req, res) => { return res.send(`Hello ${req.query.name}`); }); server.listen(3333);
-
Não é interessante retornar um texto, então em vez de utilizar o
send()
utiliza-se ojson()
.server.get('/', (req, res) => { return res.json({ message: `Hello ${req.query.name}`}); });
- O nodemon serve para ficar monitorando as alterações feitas no projeto e atualizando, sendo assim, não será preciso reiniciar o servidor do node sempre que for feita uma alteração.
- Na pasta backend rodar
yarn add nodemon -D
- Dentro do package.json adicionar
"scripts":{ "dev": "nodemon src/server.js" },
- Agora pra rodar a aplicar utilizar
yarn dev
- ERRO
E:\cd\js\tindev\backend>yarn dev yarn run v1.16.0 $ nodemon src/server.js [nodemon] 1.19.1 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node src/server.js` events.js:173 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE: address already in use :::3333 at Server.setupListenHandle [as _listen2] (net.js:1226:14)
1. SOLUÇÃO
- Algum terminal ficou aberto rodando o servidor e está utilizando a porta 3333 é só achar ele e fechar depois rodar **`yarn dev`**
-
Ir para o site e criar uma conta em try free
-
Depois de logado, crie um novo Cluster, não precisa alterar nenhuma configuração
Isso pode demorar de +5 min.
-
No menu lateral ir Security -> Database Access.
- Clicar em add new user.
- Digitar um usuario e senha.
- Selecionar Read and write to any database.
- Clicar em Add User.
-
No menu lateral ir Security -> Network Access.
- Clicar em + add ip adress.
- Selecione Allow access from anywhere.
- Confirm.
Isso pode demorar.
-
No menu lateral ir Atlas -> Clusters
- Clique em Connect.
- No Modal que abrir clie em Connect you Application
- No Driver selecionar o
nodejs
e a version pode ser a mais atual - Copie a url
mongodb+srv://<username>:<password>@cluster0-atau3.mongodb.net/test?retryWrites=true&w=majority
OBS: se estiver conectado em alguma rede que possui um proxy para bloquear qualquer tipo de acesso à rede externa não vai funcionar.
-
Para instalar de um
yarn add mongoose
Ele serve para que evite-se usar a sitaxe do banco de dados, com ele podemos utilizar apenas javascript para se comunicar com o banco. Ele é basicamente um transpilador
- Sem mongoose:
"INSERT INTO tabela VALUES ()"
- Com mongoose:
user.insert({})
- Sem mongoose:
-
Importar o mongoose antes das rotas no arquivo
server.js
.const mongoose = require('mongoose'); const routes = require('./routes');
-
E conectá-lo, também antes das rotas.
// conexao com o banco de dados mongoose.connect('mongodb+srv://<username>:<password>@cluster0-atau3.mongodb.net/test?retryWrites=true&w=majority', { useNewUrlParser: true });
- Trocar
<username>
e<passoword>
por aqueles que foram definidos na config do mongoDB Atlas. - Trocar o /test? pelo nome que se deseja dar ao banco de dados.
- Deve ficar algo assim
mongodb+srv://brochj:[email protected]/omnistack8?retryWrites=true&w=majority
- Trocar
40:40 rotas chama controllers e formulam uma respostas
45:00 instala o axios, para requisicoes em Api externas, requisicoes feitas no DevController
Com ele podemos alterar, adicionar,deletar, etc; os dados do banco, fora que é melhor de visualizar os dados.
- Baixar instalar o mongoDB Compass Community
- Deixar ele aberto.
- Vai no mongoDB Atlas, dentro do cluster criado e clica em CONNECT.
- Depois Seleciona Connect with MongoDB Compass e clica em fetch via URL ou copia a Url fornecida.
- Quando voltar ao MongoDB Compass, já vai ter um aviso que foi detectado uma URL de conexão, só aceitar.
- Colocar o username e password que foram definidos no mongoDB Atlas.
- No Authentication Database colocar
admin
. - Clicar em CONNECT
53:50 um controller n~ao deve ter mais que o 5 metodos fundamentais que sao os
- index: pra fazer uma lista dos recursos
- show: pra retornar um unico recurso
- store:
- update:
- delete:
59:00 - nao pode deixar um controller sem nenhum retorno
1:14:22 instalar yarn add cors para permitir o acesso do react ao backend
- Na pasta onde deseja criar o projeto
yarn create react-app nomeDoAPP
ou npx create react-app nomeDoAPP
- Utilizando esse comando, o projeto ja vem o babel e webpack e outros pre configurados
- Na pasta do projeto iniciar o projeto com
yarn start
Vai abrir uma aba no navegador em
http://localhost:3000
-
Na pasta
/public
index.html
: esse será o arquivo que será mandado para o navegador via javascript, e todo o código feito em react será colocado/embutido dentro da<div id="root"> </div>
. Toda a aplicacão é gerada pelo javascript e não pelo html.
O react procura pela por aquela
<div>
comid="root"
, então é importante não mudá-la.A tag
<meta name="theme-color">
é a cor que vai ficar no header do navegador do android.manifest.json
é responsável para geração/construção de PWA (Proressive Web Apps).- O código do react em si, fica dentro das inportações feita nas tags
<scripts>
.
-
Na pasta
/src
.-
O arquivo
index.js
é o arquivo de entrada da aplicação. Sempre que o react inicializar ele vai procurar por esse arquivo.- Tirar o serviceworker do
src/index.js
irá ficar assim. (serviceworker é pra PWA)
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; ReactDOM.render(<App />, document.getElementById('root'));
import ReactDOM from 'react-dom'
serve para fazer a manipulação do elementos presentes na DOM.ReactDOM.render(<App />, document.getElementById('root'));
: Esse comando é pra renderizar a aplicação<App />
dentro do elemento que tiver oid="root"
, que no caso é a<div>
que fica empublic/index.html
.- OBS:
ReactDOM.render
em 99.99% dos casos é pra ser utilizado uma única vez dentro da aplicação.
- Tirar o serviceworker do
-
serviceWorker.js
é para a construção de PWAs
-
- Colocar estilizacoes globais dentro de App.css
- Exemplo
* { margin:0; padding: 0; outline: 0; box-sizing: border-box; } html, body, #root { height: 100%; } body { background: #f5f5f5; } body, input, button { font-family: Arial, Helvetica, sans-serif; }
-
Para gerenciar rotas do react
yarn add react-router-dom
-
Crie um
routes.js
dentro da/src
. -
Dentro de
routes.js
deve ficar algo assim. Cada página da aplicação deve ter um route para ela.import React from "react"; import { BrowserRouter, Route } from "react-router-dom"; import Login from './pages/Login'; import Main from './pages/Main'; export default function Routes() { return ( <BrowserRouter> <Route path="/" exact component={Login} /> <Route path="/dev/:id" component={Main} /> </BrowserRouter> ); }
-
<Route path="/" exact component={Login} />
: Quando o usuário estiver na rota"/"
o componente que será mostrado será oLogin
. Aexact
serve para o react mostrar a telaLogin
quando a requisição for feita em"/"
, pois sem esseexact
, o react não consegue acessar as rotas mais internas, pois todos ospaths=
começam com/
. Sendo assim ele já retornaria o primeiro componente com/
, que nesse caso é oLogin
. -
O
:id
é para criar uma parâmetro que será passado para dentro deMain
, ou seja será acessível pela propmatch
mais especificamente emmatch.params.id
. Exemplo: -
Rota acessada
http://localhost:3000/dev/3421234_id
-
Main.js
export default function Main({ match }) { console.log(match.params.id) // output: 3421234_id }
-
-
No
App.js
tem que mudar agora para<Routes/>
, ficando algo assim.(...) import Routes from './routes' function App() { return ( <div className="App"> <Routes /> </div> ); } export default App;
-
Os components/telas que ficam em
routes.js
, receberão uma prop history, que é utilizada para fazer navegaçãoexport default function Login( { history } ) { (....) }
-
Depois para navegar é só dar um
history.push('/main');
import { Link } from 'react-router-dom';
- e dentro do render dá para utilizar da seguinte maneira
<Link to="/"> {/** voltando pra tela inicial */} <img src={logo} alt="Tindev" /> </Link>
- Instalar
yarn add axios
- Cria uma pasta
src/services/
nela ficará todos os serviços que faz algum tipo de comunicaçao/conexao com um prestador de dados externo à nossa aplicaçao. - Cria um arquivo
api.js
emsrc/services/api.js
- O conteúdo de
api.js
import axios from "axios"; const api = axios.create({ // baseURL: 'http://192.168.16.100:3333' //Colocar o ip do computador baseURL: 'http://localhost:3333' //tem que dat um adb reverse tcp:3333 tcp:3333 }); export default api;
- O
adb reverse tcp:3333 tcp:3333
serve para quando estiver rodando o react-native.
- O conteúdo de
- instalar
yarn add react-navigation react-native-gesture-handler react-native-reanimated
- instalar o
yarn add axios
- Pra conectar o axios do RN com o backend é necessário dar
adb reverse tcp:3333 tcp:3333
, isso pra continuar usando o localhost:3333 dentro do services/api.js - se não utilizar esse adb reverse, dentro do services/api.js trocar o localhost pelo ip local da maquina. (192.16.....)
yarn add @react-native-community/async-storage
-
instalar
yarn add socket.io
-
importar no server.js
const io = require('socket.io);
-
yarn dev
-
instala
yarn add socket.io-client
-
yarn start
14:14 ok 18:45 ok 22:12 ok
- instala
yarn add socket.io-client