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