Primeiros passos com Node.Js
Bom dia, tarde, ou noite!
Se você é programador web, com certeza já quis começar com Back-End (se não, uma hora vai).
E bom, não é difícil achar algum conteúdo sobre como construir uma API simples em node. E por esse motivo, vou tentar trazer algo mais completo, com integração de banco de dados (iremos usar sqlite) e faremos uma página de login bem simples ao longo do post.
Sente-se e vamos lá!
O que faremos ao longo deste post?
- Vamos criar uma simples api
- Vamos integrar o uso de um banco de dados na api
- E vamos criar uma simples página de cadastro e login
Introdução
Na introdução, irei explicar algumas coisas, pra melhor entendimento
O que é uma api?
L O que é REST?
O que é uma API?
Api é a sigla para Application Programming Interface (Interface de Programação de Aplicação). No contexto da API, aplicação se refere ao software com uma função distinta, e a interface pode ser pensada como uma definição de como as duas aplicações se comunicam.
Então sim, a Api é uma aplicação, que vai ser consumida por outra aplicação.
O que é REST?
Rest basicamente é um padrão de troca de informações entre duas aplicações, visando fazer a comunicação HTTP ser mais eficiente.
O que iremos utilizar?
- Node (óbvio)
- Um editor de código de sua preferência
- Conhecimento prévio de JavaScript
Criação da API
Início do projeto
Para começar, vamos criar uma pasta chamada "node-api"
Com o node instalado, vamos utilizar o comando npm init
dentro da pasta
O npm vai pedir algumas coisas como: nome do projeto, versão, descrição, e etc. Mas não precisamos nos preocupar com isso, apenas saia apertando ENTER.
Agora, vamos instalar um único pacote, coloque o seguinte comando no terminal (ou console no windows) npm install express
.
Com tudo isso feito, vamos começar a desenvolver nossa API.
Abra seu editor, e vamos criar o arquivo index.js
na raiz do projeto.
Criado o arquivo, simplesmente cole este código:
const express = require("express") // importa o express dentro da constante express
const app = express() // instancia o express dentro da constante app
app.listen(3000, () => { //Coloca o app (nosso express) para ouvir requisições na porta 3000
console.log("Servidor online!")
})
Se rodarmos isso com node .
teremos o seguinte resultado
luiz@luiz-C14CU51:~/node-api$ node .
Servidor online!
(pra parar de rodar é so dar um CTRL C)
Bom, a princípio nada aconteceu, mas através deste simples código, fomos capazes de rodar um servidor.
Implementando API
Bom, agora sim, iremos implementar uma API a nossa aplicação node.
Agora, adicione este código ápos a instância do express, e antes de iniciarmos o servidor
app.get("/get", (req, res) => {
res.status(200).json({
message: "Get"
})
})
/*Essas linhas basicamente definem que
o app irá escutar por requisiçoes que utilizam o método GET na url
localhost:3000/get.
req = Requisição feita pelo cliente
res = Resposta do servidor
res.status define o status code da resposta
e .json define o corpo json da resposta
o mesmo se repete em todos os outros, a única alteração é o método em questão
*/
app.post("/post", (req, res) => {
res.status(200).json({
message: "Post"
})
})
app.put("/put", (req, res) => {
res.status(200).json({
message: "Put"
})
})
app.delete("/get", (req, res) => {
res.status(200).json({
message: "Delete"
})
}
Criamos uma api amigos, para testa-la, podemos usar programas como o Insomnia e fazer os requests nas urls:
- http://localhost:3000/get - Defina o método como get
- http://localhost:3000/post - Defina o método como post
- http://localhost:3000/put - Defina o método como put
- http://localhost:3000/delete - Defina o método como delete
Enfim, a nossa api está pronta.
Trabalhando com banco de dados
Agora, iremos integrar um belíssimo banco de dados, e junto a isso, criaremos uma página de cadastro e login. Iremos utilizar o Prisma, ORM sensacional que nos possibilita trabalhar com sqlite dentro do código JavaScript.
Vamos instalar o dotenv e o prisma utilizando o seguinte comando:
npm install prisma @prisma/client dotenv
Feita a instalação, rode o seguinte comando
npx prisma init
Veja que, foi criada uma pasta chamada "prisma", contendo um arquivo "schema.prisma", e outros arquivos foram criados
Nossa pasta ficará assim:
node_modules
prisma
L schema.prisma
index.js
.env
.gitignore
package-lock.json
package.json
Vamos abrir o arquivo schema.prisma, e edita-lo da seguinte forma:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model User{
id String @id @default(uuid())
email String @unique
password String
@@map("users")
}
Por agora, vamos nos atentar apenas ao datasource e ao model User.
O datasource define algumas propriedades importantes para a conexão com o banco de dados, como qual banco estamos utilizando (nesse caso, sqlite) e a url (que será um arquivo)
o model User é basicamente a representação da tabela users, que, já estruturamos, definimos um campo de id, que é do tipo string(uuid() é basicamente definindo que o id sera um identificador único universal), email, que será unico e será uma string, e uma senha que também sera uma string. Agora, so falta criar o banco de dados não é?
Agora, no arquivo .env defina a DATABASE_URL para file:../data/database.db
DATABASE_URL=file:../data/database.db
E vamos rodar o seguinte
npx prisma migrate dev
este comando cria uma nova migration (basicamente sincroniza o banco de dados com o schema)
coloque um nome para a migration
E pronto, temos um arquivo .db
Bom, o post já está meio grande, então pra não ficar gigante, eu vou colocar o source da aplicação de login que prometi no github, com comentários e etc (vou colocar o link aqui em algum tempo).
Me corrija se expliquei algo errado, ou algo que ficou mal explicado
Espero que isso sirva de ajuda a algum de vocês. ABRAÇO.