├── .gitignore ├── README.md ├── app └── models │ └── usuario.js ├── package.json └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | *.DS_Store 2 | *.log 3 | node_modules 4 | test/reports 5 | *~ 6 | cov-* 7 | coverage 8 | .idea 9 | .DS_Store 10 | .vscode 11 | typings -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tutorial: Desenvolvendo uma Aplicação RESTful API em Node.Js & Express.Js com MongoDb 2 | 3 | Código desenvolvido do tutorial do CRUD em Node.Js, Express e MongoDb, através do meu site: [Code4coders] (www.code4coders.wordpress.com) 4 | 5 | ## Recursos utilizados no desenvolvimento: 6 | 7 | - Node.Js; 8 | - Express.Js ~ v.4.0; 9 | - Conceito RestFul; 10 | - MongoDb; 11 | - Mongoose ~4.x; 12 | - JSON data (para retornar os dados); 13 | - PostMan (testar a API criada); 14 | 15 | ## Acompanhamento do Desenvolvimento dos BackLogs do Projeto: 16 | 17 | Caso queira saber o acompanhamento do desenvolvimento de cada backlog do projeto que está sendo 18 | desenvolvido, basta clicar [Aqui](https://trello.com/b/exbJW7kt/tutorial-construindo-uma-aplicacao-restful-api-node-js-express-com-mongodb) 19 | 20 | ## Testando a Aplicação no Postman: 21 | 22 | Caso queira testar as API's criadas no projeto, primeiro baixe o [Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop). 23 | Depois de realizar o download do Postman, basta agora realizar os passos abaiaxo para 24 | poder testar cada API criada! 25 | 26 | ROTA | HTTP(Verbo) | Descrição | 27 | ------------------------- | ----------------- | --------------------- | 28 | /api/usuarios | GET | Selecionar Todos | 29 | /api/usuarios | POST | Atualizar Por Id | 30 | /api/usuarios/:usuario_id | GET | Selecionar Por Id | 31 | /api/usuarios/:usuario_id | PUT | Atualizar Por Id | 32 | /api/usuarios/:usuario_id | DELETE | Excluir Por Id | 33 | 34 | ## Executar Localmente 35 | 36 | Caso você deseja executar o projeto na sua máquina local, basta seguir os passos abaixo: 37 | 38 | ## Começando... 39 | 40 | Para começar, você deve simplesmente clonar o repositório do projeto na sua máquina e instalar as dependências. 41 | 42 | ### Pre-Requisitos 43 | 44 | Antes de instalar as dependências no projeto, você precisa já ter instalado na sua máquina: 45 | 46 | * **Node.Js**: Caso não tenha, basta realizar o download [Aqui](https://nodejs.org/en/) 47 | * **MongoDb**: Caso também não tenha, basta realizar o download [Aqui](https://www.mongodb.com/download-center#community) 48 | 49 | p.s.: o MongoDb caso você decida conectar a sua base de dados de maneira local. Caso não, basta usar 50 | a base de dados do MongoDb em Cloud: 51 | 52 | * [Modulus](https://modulus.io/) 53 | * [MLab](https://mlab.com/) 54 | 55 | ### Instalando as Dependências 56 | 57 | Abre o cmd (caso esteja utilizando o Windows) e digite a path do seu projeto 58 | 59 | ``` 60 | cd "C:\Users\NomeDoComputador\Documents\..." 61 | ``` 62 | 63 | Depois, quando estiver na pasta do projeto, basta digitar no cmd a seguinte instrução: 64 | 65 | ``` 66 | npm install 67 | ``` 68 | 69 | Ao digitar a instrução acima, automaticamente ele irá baixar todas as dependências listadas no arquivo package.json: 70 | 71 | * `node_modules` - que contêm os packages do npm que precisará para o projeto. 72 | 73 | ### Executando a Aplicação 74 | 75 | Bom, agora na mesma tela do cmd, basta iniciar o server para o projeto ser executado localmente. 76 | 77 | ``` 78 | node server.js 79 | ``` 80 | 81 | Depois, você precisará abrir um outro terminal na sua máquina e iniciar o MongoDb. Basta digitar na tela do cmd o seguinte comando: 82 | 83 | ``` 84 | mongod 85 | ``` 86 | 87 | Caso o MongoDb esteja devidamente instalado em sua máquina, ele iniciará o serviço mostrando que a port 27017 foi iniciada. 88 | 89 | 90 | Agora, abre a página da aplicação em `http://localhost:8000/api`. E pronto a aplicação será executada de maneira local na sua máquina. 91 | 92 | 93 | p.s.: no projeto, disponibilizei 2 maneiras de realizar a conexão de dados com o MongoDb através do Mongoose: 94 | 95 | * **De maneira local**: utilizando o MongoDb; 96 | * **De maneira em cloud**: utilizando o Modulus; 97 | 98 | Fiquem à vontade em usar ou até mesmo testar ambas as conexões!! :) 99 | -------------------------------------------------------------------------------- /app/models/usuario.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Arquivo: usuario.js 3 | * Author: Glaucia Lemos 4 | * Description: Arquivo onde trataremos o modelo do projeto. 5 | * Definição dos esquemas para serem utilizadas na Base de Dados (MongoDb) 6 | * Data: 13/10/2016 7 | */ 8 | 9 | var mongoose = require('mongoose'); 10 | var Schema = mongoose.Schema; 11 | 12 | var UsuarioSchema = new Schema({ 13 | nome: String, 14 | login: String, 15 | senha: String 16 | }); 17 | 18 | module.exports = mongoose.model('Usuario', UsuarioSchema); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Glaucia Lemos", 3 | "license": "MIT", 4 | "version": "1.0.0", 5 | "description": "Tutorial - Construindo uma Aplicação RESTful API - Node.Js & Express com MongoDb", 6 | "name": "node-api", 7 | "main": "server.js", 8 | "scripts": { 9 | "test": "./node_modules/.bin/mocha --reporter spec" 10 | }, 11 | "dependencies": { 12 | "body-parser": "~1.0.1", 13 | "express": "~4.0.0", 14 | "jslint": "^0.10.3", 15 | "mongoose": "*", 16 | "request": "^2.74.0" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/glaucia86/tutorial-crud-node-express-mongodb" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Arquivo: server.js 3 | * Descrição: Arquivo responsável por levantar o serviço do Node.Js para poder 4 | * executar a aplicação e a API através do Express.Js. 5 | * Author: Glaucia Lemos 6 | * Data de Criação: 12/09/2016 7 | */ 8 | 9 | //Configuração Base da Aplicação: 10 | //==================================================================================== 11 | 12 | /* Chamada das Packages que iremos precisar para a nossa aplicação */ 13 | var express = require('express'); //chamando o pacote express 14 | var app = express(); //definção da nossa aplicação através do express 15 | var bodyParser = require('body-parser'); //chamando o pacote body-parser 16 | var mongoose = require('mongoose'); 17 | var Usuario = require('./app/models/usuario'); 18 | 19 | mongoose.connect('mongodb://root:123456@jello.modulusmongo.net:27017/ity3Ryje'); //via Modulus 20 | //mongoose.connect('mongodb://localhost/node-api'); //aqui caso queira executar de maneira local usando o MongoDb 21 | 22 | /** Configuração da variável 'app' para usar o 'bodyParser()'. 23 | * Ao fazermos isso nos permitirá retornar os dados a partir de um POST 24 | */ 25 | app.use(bodyParser.urlencoded({ extended: true })); 26 | app.use(bodyParser.json()); 27 | 28 | /** Definição da porta onde será executada a nossa aplicação */ 29 | var port = process.env.PORT || 8000; 30 | 31 | //Rotas da nossa API: 32 | //============================================================== 33 | 34 | /* Aqui o 'router' irá pegar as instâncias das Rotas do Express */ 35 | var router = express.Router(); 36 | 37 | /* Middleware para usar em todos os requests enviados para a nossa API- Mensagem Padrão */ 38 | router.use(function(req, res, next) { 39 | console.log('Algo está acontecendo aqui........'); 40 | next(); //aqui é para sinalizar de que prosseguiremos para a próxima rota. E que não irá parar por aqui!!! 41 | }); 42 | 43 | /* Rota de Teste para sabermos se tudo está realmente funcionando (acessar através: GET: http://localhost:8000/api) */ 44 | router.get('/', function(req, res) { 45 | res.json({ message: 'YEAH! Seja Bem-Vindo a nossa API' }); 46 | }); 47 | 48 | // Rotas que irão terminar em '/usuarios' - (servem tanto para: GET All & POST) 49 | router.route('/usuarios') 50 | 51 | /* 1) Método: Criar Usuario (acessar em: POST http://localhost:8080/api/usuarios */ 52 | .post(function(req, res) { 53 | var usuario = new Usuario(); 54 | 55 | //aqui setamos os campos do usuario (que virá do request) 56 | usuario.nome = req.body.nome; 57 | usuario.login = req.body.login; 58 | usuario.senha = req.body.senha; 59 | 60 | usuario.save(function(error) { 61 | if(error) 62 | res.send(error); 63 | 64 | res.json({ message: 'Usuário criado!' }); 65 | }); 66 | }) 67 | 68 | /* 2) Método: Selecionar Todos (acessar em: GET http://locahost:8080/api/usuarios) */ 69 | .get(function(req, res) { 70 | 71 | //Função para Selecionar Todos os 'usuarios' e verificar se há algum erro: 72 | Usuario.find(function(err, usuarios) { 73 | if(err) 74 | res.send(err); 75 | 76 | res.json(usuarios); 77 | }); 78 | }); 79 | 80 | // Rotas que irão terminar em '/usuarios/:usuario_id' - (servem tanto para GET by Id, PUT, & DELETE) 81 | router.route('/usuarios/:usuario_id') 82 | 83 | /* 3) Método: Selecionar Por Id (acessar em: GET http://localhost:8080/api/usuarios/:usuario_id) */ 84 | .get(function(req, res) { 85 | 86 | //Função para Selecionar Por Id e verificar se há algum erro: 87 | Usuario.findById(req.params.usuario_id, function(error, usuario) { 88 | if(error) 89 | res.send(error); 90 | 91 | res.json(usuario); 92 | }); 93 | }) 94 | 95 | /* 4) Método: Atualizar (acessar em: PUT http://localhost:8080/api/usuarios/:usuario_id) */ 96 | .put(function(req, res) { 97 | 98 | //Primeiro: Para atualizarmos, precisamos primeiro achar o Usuario. Para isso, vamos selecionar por id: 99 | Usuario.findById(req.params.usuario_id, function(error, usuario) { 100 | if(error) 101 | res.send(error); 102 | 103 | //Segundo: Diferente do Selecionar Por Id... a resposta será a atribuição do que encontramos na classe modelo: 104 | usuario.nome = req.body.nome; 105 | usuario.login = req.body.login; 106 | usuario.senha = req.body.senha; 107 | 108 | //Terceiro: Agora que já atualizamos os campos, precisamos salvar essa alteração.... 109 | usuario.save(function(error) { 110 | if(error) 111 | res.send(error); 112 | 113 | res.json({ message: 'Usuário Atualizado!' }); 114 | }); 115 | }); 116 | }) 117 | 118 | /* 5) Método: Excluir (acessar em: http://localhost:8080/api/usuarios/:usuario_id) */ 119 | .delete(function(req, res) { 120 | 121 | //Função para excluir os dados e também verificar se há algum erro no momento da exclusão: 122 | Usuario.remove({ 123 | _id: req.params.usuario_id 124 | }, function(error) { 125 | if(error) 126 | res.send(error); 127 | 128 | res.json({ message: 'Usuário excluído com Sucesso! '}); 129 | }); 130 | }); 131 | 132 | /* Todas as nossas rotas serão prefixadas com '/api' */ 133 | app.use('/api', router); 134 | 135 | //Iniciando o Servidor (Aplicação): 136 | //============================================================== 137 | app.listen(port); 138 | console.log('Iniciando a aplicação na porta ' + port); --------------------------------------------------------------------------------