Node.js
Node (ou formalmente Node.js) é um ambiente em tempo de execução open-source (código aberto) e multiplataforma que permite que os desenvolvedores criem todo tipo de aplicativos e ferramentas do lado servidor em JavaScript. Node destina-se a ser usado fora do contexto de um navegador (ou seja executando diretamente no computador ou no servidor). Como tal, o ambiente omite APIs JavaScript específicas do navegador e adiciona suporte para APIs de sistema operacional mais tradicionais, incluindo bibliotecas de sistemas HTTP e arquivos.
Express.js
Express é o framework web mais popular, e é a biblioteca subjacente para uma série de outros frameworks populares de Nodes. Fornece mecanismos para:
Gestão das requisições de diferentes requisições e rotas e URLs.
Combinação com mecanismos de renderização de "view" para gerar respostas inserindo dados em modelos.
Definição das configurações comuns da aplicação web, como a porta a ser usada para conexão e a localização dos modelos que são usados para renderizar a resposta.
Inclusão em qualquer ponto da requisição de um "middleware" para interceptar processar ou pré-processar e tratar à mesma.
MongoDB
MongoDB é um banco de dados de código aberto, gratuito, de alta performance, sem esquemas e orientado à documentos, lançado em fevereiro de 2009 pela empresa 10gen. Foi escrito na linguagem de programação C++ (o que o torna portável para diferentes sistemas operacionais) e seu desenvolvimento durou quase 2 anos, tendo iniciado em 2007.
Fonte: https://developer.mozilla.org/pt-BR/docs/Learn/Server-side/Express_Nodejs/Introdu%C3%A7%C3%A3o
Instalando Ferramentas e elementos necessários
Instalar Node.js
Instalar Express.js
https://www.npmjs.com/package/express
npm install express
Instalar MongoDB
https://www.mongodb.com/download-center/community
Executar MongoDB: mongod
Executar MongoDB no COTEMIG: mongod --dbpath H:data/db
Irá apontar a gravação do seu banco de dados neste path! Para isso funcionar, você precisar criar o diretório data/db na sua unidade H:
Acessar o bancos de dados do MongoDB: mongo
Iniciando ambiente
Crie o diretório do projeto: mkdir project
Acesse diretório: cd project
Crie o arquivo package.json: npm init -y
Instale as dependencias:
npm install express body-parser node-restful --save
npm install mongoose@5.7.1 --save
Implementando servidor Express
Crie a pasta "config" dentro da pasta do projeto (project)
Dentro da pasta "config" crie o arquivo "server.js" para configuração do servidor.
No arquivo server.js, alguns itens deverão ser criados:
Uma constante que irá armazenar o valor da porta.
Declaração das dependências:
o middleware body-parser faz a interpretação do corpo(BODY) da requisição;
express é o nosso framework web;
Criando servidor: atribuimos nossa variável "server" a uma instância do express()
Adicionando ao nosso servidor dois middlewares: todas as requisições que chegarem em nosso servidor irão passar em sequência pelos middlewares "bodyParser.urlencoded" que faz o parse das requisições via formulário e "bodyParser.json" das requisições via json.
Setando porta do nosso servidor e exportando módulo node. Obs: Se ocorrer algum erro relacionado a porta, exclua as linhas de códigos 10 a 12 e adicione "server.listen(port, function(){})" .
server.js
const port = 4000;
//BODY parse of requistion
const bodyParser = require('body-parser');
const express = require('express');
const server = express();
server.use(bodyParser.urlencoded({ extended: true }));
server.use(bodyParser.json());
server.listen(process.env.PORT || port, function () {
console.log('Listening on');
});
module.exports = server
Mapeamento ODM do objeto Pessoa (mongoose)
Dentro da pasta "config" crie um arquivo "database.js" que será responsável pela conexão com nosso banco de dados MongoDB
Atribua uma constante ao mongoose: O mongoose é responsável pela conexão com o MongoDB e mapeamento dos objetos. Utilize o module.exports para apontar para o método "mongoose.connect(url)", método esse que faz a conexão com o banco, independente quer seja local ou em nuvem.
database.js
const mongoose = require('mongoose')
module.exports = mongoose.connect('mongodb://localhost/myDataBase',{
})
Caso prefira conectar à um banco de dados MongoDB na nuvem, pode-ser utilizar a configuração abaixo. Criando um banco de dados na nuvem com MongoDB Atlas.
Exemplo:
database.js
const mongoose = require('mongoose')
module.exports = mongoose.connect('mongodb+srv://teste:teste123@cluster0.ujwufrt.mongodb.net/mydatabase?retryWrites=true&w=majority',{ useUnifiedTopology : true, useNewUrlParser : true
})
Mapeamento entre objeto e documento
Na pasta "project" crie uma pasta "itens" onde estaremos implementando nosso Schema e os serviços relacionados a ele.
Na pasta "itens" crie um arquivo "pessoa.js" que será o Schema representando cada pessoa de uma lista. Ex: juridica, física e etc.
Declaração das dependências: o node-restful é um pacote que permite a exposição de uma API REST de forma simples.
Integração do node-restful com mongoose.
Criando e exportando Schema "pessoaSchema".
pessoa.js
const restful = require('node-restful')
const mongoose = restful.mongoose
const pessoaSchema = new mongoose.Schema({
name: { type: String, required: true },
type: { type: String, required: true },
age: { type: Number, min: 0, required: true }
})
module.exports = restful.model('Pessoa', pessoaSchema)
Criação dos serviços da API (GET, POST, PUT e DELETE)
Na mesma pasta em que foi criado o arquivo "pessoa.js" crie um arquivo "pessoaService.js" que será responsável pelos métodos da nossa API.
Importação do nosso Schema "pessoa.js".
Criando métodos da nossa API REST relacionados ao nosso Schema "pessoaSchema" do MongoDB.
Atualizando resposta dos métodos POST/PUT da API.
Exportando schema "pessoa.js" com métodos adicionados.
pessoaService.js
const Pessoa = require('./pessoa');
//Create REST API, adds CRUD to Mongog's schema
Pessoa.methods(['get', 'post', 'put', 'delete']);
//Return post/put methods updated
Pessoa.updateOptions({new: true, runValidators: true});
module.exports = Pessoa
Rotas
As rotas em Node.js nos proporciona a utilização de serviços que retornam conteúdo, ou seja, elas respondem as requisições do cliente (browser) através das URLs.
Expondo serviços através de rotas(urls)
Dentro da pasta "config" crie um arquivo "routes.js".
Declaração de dependência: atribua uma constante ao Express.
Atribua uma função ao module.exports recebendo o "service" como parametro.
Criando constante "router" que recebe o roteador do Express.
Adicionando middleware "router", ou seja, todas as requisições na url '/' serão filtradas pelo middleware.
Importando modulo "pessoaService.js" e registrando os serviços da API no registrador de rotas na url '/pessoa'.
routes.js
const express = require('express');
module.exports = function(server) {
//API Routes
const router = express.Router();
server.use('/', router);
//Registering API methods in router
const itemService = require('../itens/pessoaService');
itemService.register(router, '/pessoa');
}
Criação do loader.js
Na pasta "project" crie um arquivo "loader.js" e importe todos os arquivos relacionados a configuração.
Configurações do servidor.
Configurações do banco de dados.
Requerindo/Chamando método do modulo "routes.js" passando como parâmetro a instância do servidor express do modulo "server.js".
loader.js
const server = require('./config/server')
require('./config/database')
require('./config/routes')(server)
No arquivo package.json altere o campo "scripts" adicionando "start" em seguida o termo "node" e o nome do seu servidor.
package.json
"scripts": {
"start": "node loader.js"
},
Startando o servidor
Verifique se o MongoDB está rodando:
Executar MongoDB: mongod
Executar MongoDB no COTEMIG: mongod --dbpath H:data/db
Irá apontar a gravação do seu banco de dados neste path! Para isso funcionar, você precisar criar o diretório data/db na sua unidade H:
No terminal digite o comando "npm start", agora você tem um API REST em Node.js que se comunica com MongoDB.
Testando a API
Para realização dos teste aconselhasse a utilização do Postman.
Recupera os registros armazenados
- Método GET: http://localhost:4000/pessoa
Obs.: Para isso:
defina o tipo de requisição como GET
Insere um novo registro
- Método POST: http://localhost:4000/pessoa
Obs.: Para isso:
defina o tipo de requisição como POST
Na aba Body, selecione a opção raw e o tipo JSON
Insira um JSON, no formato:
{
"name": "Fulano",
"type": "tipo 5",
"age": 67
}
Altera um registro
- Método PUT: http://localhost:4000/pessoa/:id
Exemplo: http://localhost:4000/pessoa/64818481e717c33ee84f46bd
Obs.: Para isso:
defina o tipo de requisição como PUT
Na aba Body, selecione a opção raw e o tipo JSON
Insira um JSON, no formato com sua alteração:
{
"name": "Fulano Silva",
"type": "tipo 5",
"age": 67
}
Remove um registro
- Método DELETE: http://localhost:4000/pessoa/:id
Exemplo: http://localhost:4000/pessoa/64818481e717c33ee84f46bd
Obs.: Para isso:
defina o tipo de requisição como DELETE