Dev (Back & Front)ARTIGO

Criando package (módulo) em Node.js

Muitas pessoas querem estudar Node.js pela simplicidade de trabalhar com processamento assíncrono e por usar JavaScript em server side. JavaScript é uma linguagem simples com foco no desenvolvimento Client side, mas quando colocamos o JavaScript do lado do servidor, começam a surgir algumas dúvidas como: estrutura do software, como criar biblioteca, qual Framework usar e muitas outras.

Dando uma olhada no Github, vi que há muitos softwares que se parecem uma linguiça, com mais de 500 linhas em um mesmo arquivo. Aí me vem a seguinte pergunta: “JavaScript não é orientado a objeto?”. É claro que sim! Então, tem alguma coisa errada, pois uns dos paradigmas é dividir funcionabilidades, nas quais cada modulo faça sua parte e, ao usar todas elas, faz o que foi proposto.

Então, vamos seguir um exemplo simples:

  • Conectar-se a um banco de dados;
  • Fazer insert, update e delete;
  • Desconectar-se do banco de dados.

O exemplo usado encontra-se no repositório “example-nodejs-mongodb”, na minha conta do Github. Nele eu vou usar o banco de dados MongoDB, por ser mais simples de instalar e usar (pois é um banco de dados NoSQL). Pressupondo que o MongoDB já esteja instalado em seu sistema operacional (para usuários Linux, basta baixar o source do MongoDB no site e depois rodar o binario mongod; já para usuários Windows, não tenho experiência no ambiente, mas achei este tutorial que pode ajudar). A instalação do NodeJS e NPM no Linux e Windows é uma operação relativamente simples, por isso não vou detalhar todo o processo.

A primeira coisa que temos que ter em mente é que tudo o que é escrito dentro de um package (próprio) não é levado para fora. Você precisa especificar o que realmente quer expor do seu package. No arquivo mongocon.js temos um exemplo de como trabalhar com exports no Node.JS:

    var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/avelinous');

exports.mongoose = mongoose;

No exemplo acima, estou expondo toda a classe do mongoose, mas eu poderia restringir export só alguns metodos por exemplo:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/avelinous');

exports.mongoose_schema = mongoose.Schema;

Assim, podemos limitar o acesso dentro de um package. Caso queira fazer um package e expor publicamente via NPM, basta criar um package.json juntamente com o seu source, assim pode colocar as dependências do seu package e em qual versão do NodeJS ele roda. Veja o exemplo de um package.json:

{
"name": "mongo_test",
"description": "A package using mongoose ODM",
"author": "Thiago Avelino <thiagoavelinoster AT gmail DOT com>",
"dependencies": {
"mongoose": ">= 2.7.0"
},
"engine": "node 0.6.19"
}

Fundador da nuveo.ai/levpay (com Banco Rendimento) e Matemático pelo IME-USP. Trabalha no dia a dia com inteligência artificial, rede neural (usando técnicas de machine e deep learning) e visão computacional. Com a necessidade de processar grandes volumes de dados o seu foco de pesquisa e desenvolvimento incluem Go, Racket/Clojure (apaixonado por dialeto lisp), Python, sistemas distribuídos, concorrência e já passou por diversos projetos Open Source https://github.com/avelino.

Ver perfil