Nesta segunda parte da aplicação REST, entenderemos o que vem a ser o Node.JS e como inserir dados no banco MongoDB. A IBM publicou um dos melhores e dos mais esclarecedores artigos sobre o que exatamente é o Node.js?. Resumidamente, o Node é uma plataforma de software que liberta JavaScript do navegador e permite que seja usado como uma plataforma de desenvolvimento de software em aplicações Server-Side. Executa sobre um motor ultra-rápido do Chrome, V8, e acrescenta em uma biblioteca rápida e robusta de módulos de I/O de rede assíncrona. Tendo como foco principal a construção de alto desempenho, um servidor altamente escalável e aplicativos cliente para o "Real Time Web". Uau. Aposto que pelo menos ficou curioso, então vamos brincar.
Criando a Aplicação com Express
No site oficial do Node.js baixe e instale o servidor. Vamos brincar em um esquema um pouco diferente de um simples 'Hello World', abra uma janela de comandos e instale o Express:
npm install -g express@2.5.8
Para manter uma organização, criaremos uma pasta para hospedar os projetos, por exemplo C:\rest. Dentro desta digite o seguinte comando para criar nosso projeto:
express notas
Finalize a configuração com:
cd notas npm install
Então, temos nosso primeiro projeto em C:\rest\notas. Vamos baixar os drivers para acessarmos nosso banco, para tanto altere o arquivo package.json, da seguinte forma:
{ "name": "Notas", "version": "0.0.1", "private": true, "dependencies": { "express": "2.5.8", "jade": ">= 0.0.1", "mongoose": "2.6.5" } }
Adicionamos uma dependência ao Mongoose (que é o driver para o MongoDB), instale através do seguinte comando:
npm install
Estamos com o esqueleto da aplicação totalmente montada. O Express funciona quase como o 'Maven', só que ao invés de Java utiliza uma dependência de pacotes com JavaScript e JSON. Editamos o arquivo app.js na raiz do projeto e adicionamos as seguintes linhas:
var express = require('express'), routes = require('./routes'), fs = require('fs'), NotaModel = require('./models/NotaModel.js'); ... app.configure('production', function(){ app.use(express.errorHandler()); }); app.get('/form', function(req, res) { fs.readFile('./form.html', function(error, content) { if (error) { res.writeHead(500); res.end(); } else { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(content, 'utf-8'); } }); }); app.post('/gravar', function(req, res) { var titulo = req.body.titulo; var descricao = req.body.descricao; NotaModel.gravarNota(titulo, descricao, function(err, user) { if (err) throw err; res.redirect('/form'); }); }); ...
Criamos duas chamadas: "/form" e "/gravar". A primeira traz um formulário HTML enquanto que a segunda recebe os dados deste formulário e grava no banco. Criamos, nesta mesma pasta (que é a raiz do nosso projeto), um arquivo chamado form.html com a seguinte codificação:
<h1>Minhas Notas</h1> <form action="/gravar" method="post"> <div> <label>Título:</label> <input type="text" name="titulo"/><br/> </div><div> <label>Descrição:</label> <textarea row="3" col="60" name="descricao"></textarea> </div><div> <input type="submit" value="Gravar Nota"/> </div> </form>
Este formulário recebe os dados e quando submetido executa a chamada a ação "/gravar". No meu site publiquei um documento chamado MongoDB com Java, recomendo que baixe e leia para ter melhores referências sobre este banco.
Na camada com o MongoDB
O próximo passo é criar um arquivo de configuração para acessar o MongoDB. Na raiz do projeto criamos uma pasta chamada \lib, nesta um arquivo chamado db.js com a seguinte codificação:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; module.exports.mongoose = mongoose; module.exports.Schema = Schema; connect(); function connect() { var url = 'mongodb://localhost:27017/notas'; mongoose.connect(url); } function disconnect() { mongoose.disconnect() }
Temos dois métodos neste script, um para conectar e outro para desconectar o banco. Na url de conexão passamos o endereço do servidor, a porta e o nome da base de dados (que se não existe, será criada). Próximo passo é criarmos a tabela (que no MongoDB é chamado de Coleção). Na raiz do projeto criamos uma pasta chamada \models, nesta um arquivo chamado NotaModel.js com a seguinte codificação:
var db = require('../lib/db'); var NotaSchema = new db.Schema({ titulo: {type: String, unique: true}, descricao: String }) var MinhaNota = db.mongoose.model('Nota', NotaSchema); module.exports.gravarNota = gravarNota; function gravarNota(titulo, descricao, callback) { var instance = new MinhaNota(); instance.titulo = titulo; instance.descricao = descricao; instance.save(function (err) { if (err) { callback(err); } else { callback(null, instance); } }); }
Executar a aplicação
Inicie o servidor do MongoDB (veja no PDF disponibilizado como proceder) e o servidor do Node.JS com o seguinte comando:
node app.js
Acesse o endereço http://localhost:3000/form para testar a aplicação e cadastre algumas notas. Em seguida acesse o servidor do MongoDB e digite os seguintes comandos:
show dbs [e verifique que existe uma base chamada notas] use notas show collections [e verifique que existe uma coleção chamada notas] db.notas.find() [e observe os dados que foram digitados]
Então é isso, agora podemos nos divertir persistindo dados no MongoDB através de um servidor puramente JavaScript.
Obrigado e até a próximaFernando Anselmo
Olá, boa tarde.
ResponderExcluirEsta é a primeira vez q tento utilizar node e mongo, estou com uma duvida a respeito do banco Mongo, instalei o mongo utilizando o prompt, então quando inicializo o servidor node com o comando: node app.js, estou inicializando o banco de dados tambem?
Pois quando acesso o localhost:3000\form e tento cadastrar uma nota o navegador fica carregando muito tempo.
Bom aguardo retorno, agradeço pelo post e até mais.
Abrçs.
Deco, boa tarde.
ResponderExcluirNão, o Mongo funciona de forma independente ao Node, ou seja, você deve primeiro inicializar o banco depois o Node.
[ ] ´s
Fernando Anselmo