NODE.JS e suas possibilidades em se reinventar

Dario Monteiro
edifyeducation
Published in
6 min readJun 17, 2022

Sou desenvolvedor já há alguns anos, tendo iniciado minha trajetória profissional com o Java em 2001, vivido o auge da linguagem e ser agradecido a essa tecnologia que me deu muita disciplina e experiência a cada novo projeto e desafio que passei, foi uma verdadeira escola.

Quando existe dedicação, chega um momento que se atinge o ponto mais alto tecnicamente, e foi nesse ponto que cheguei com o Java. A grande pergunta que todo o desenvolvedor vai se fazer um dia na carreira apareceu para mim: E agora, que caminho seguir? Migrar para gestão em TI ou analisar o mercado e buscar uma linguagem robusta, rápida e que tem possibilidades de evolução ao longo dos anos?

Eu já havia feito a transição de tecnologias de programação no passado, passando por linguagens de programação clássicas, como Basic (procedural), Pascal (estruturada), Delphi (OO), ASP clássico (primeira experiência com web), e claro, Java. Eu tinha bastante interesse em Cloud, então decidi avaliar quais opções eu tinha para entrar nesse novo paradigma. Depois de pesquisar, decidi que o Node.js me pareceu a melhor opção. Ao escolher o Node.js tive que vencer o preconceito que tinha com a linguagem Javascript, também uma velha conhecida, mas que os desenvolvedores da minha geração nunca a levaram muito a sério ao ponto de construir o back-end de um sistema utilizando-a.

Quero compartilhar com você de maneira resumida o resultado da minha pesquisa e o motivo da minha escolha:

O que é Node.js?

Antes de falar o que o Node.js é, vou falar o que ele não é: Um framework Javascript. Não é uma linguagem de programação. Você programa usando JavaScript, linguagem usada há muito tempo no client-side das aplicações web, uma linguagem de scripting interpretada, embora no Node.js seja semelhante às linguagens compiladas, já que Node é um ambiente de execução que roda na máquina virtual V8, que faz etapas de pré-compilação e otimização antes do código entrar em operação.

Node.js é uma tecnologia assíncrona que trabalha com uma thread de execução. Assíncrona significa que cada requisição ao Node.js não bloqueia o processo, atendendo a um volume absurdamente grande de requisições ao mesmo tempo, mesmo sendo single thread. Para lidar bem com isso, você terá de aprender callbacks e promises (aconselho fortemente).

Explicando melhor, imagine um único fluxo de execução (Event Loop). Quando chega uma requisição, entra nesse fluxo, a máquina virtual Javascript verifica o que tem de ser feito, delega a atividade (consultar dados no banco) e volta a atender novas requisições enquanto este processamento está acontecendo. Quando a atividade termina (dados retornados pelo banco), ela volta ao fluxo principal para ser devolvida a resposta. Isso é diferente do funcionamento tradicional da maioria das linguagens de programação, que trabalham com o conceito de multi-threading: para cada requisição recebida, cria uma nova thread para atender à requisição. A maioria das linguagens tem comportamento bloqueante na thread em execução, se uma thread faz uma consulta no banco de dados, a thread fica aguardando essa consulta terminar. Esse modelo tradicional, com uma thread por requisição (multi-thread) é mais fácil de programar, mas bem custoso para o hardware, consumindo muito mais recursos.

Quais as vantagens do Node.js?

Node.js usa Javascript, que tem algumas décadas de existência e milhões de programadores pelo mundo. Qualquer pessoa aprende a programar JS mais fácil e você contrata programadores mais facilmente para esta tecnologia. O mesmo não pode ser dito das outras plataformas.

Node.js é muito leve e é multiplataforma. Isso permite que você consiga rodar seus projetos em servidores abertos e com o SO que quiser, diminuindo bastante seu custo de hardware e software. Só a questão de licença que você economiza em players de datacenter como Amazon chega a 50% de economia, fora a economia de hardware que em alguns projetos pode chegar a 80%.

Node.js permite Javascript full-stack. Uma grande reclamação de muitos programadores web é ter de trabalhar com linguagens diferentes no front-end e no back-end. Node.js resolve isso ao permitir que você trabalhe com JS em ambos, principalmente se usar frameworks modernos de front como React.

Quais as desvantagens do Node.js?

Node.js é assíncrono. Isso é um pouco complicado de se acostumar dependendo da complexidade de cada uma das suas requisições, já que o uso demasiado de callbacks pode gerar o chamado callback hell, com um aninhamento extenso de funções e uma complexidade absurda para debugar, o que é resolvido parcialmente com o uso de Promises (JS ES6) e completamente com Async/Await (JS ES7).

Node.js tem um ecossistema gigantesco. Sim, isso é uma vantagem também. Mas quem nunca ficou perdido com a quantidade enorme de frameworks e pacotes para Node.js (o NPM é o maior repositório de pacotes de bibliotecas do mundo), muitas vezes é difícil decidir o que usar no seu projeto.

Node.js usa Javascript. Para quem gosta de linguagens rígidas como Java e C#, isso incomoda. Não ter orientação a objetos que estamos acostumados, a tipagem fraca, não ter compilação tradicional, etc. Com as evoluções do JavaScript muito disso foi compensado, usando TypeScript fica-se muito próximo de linguagens fortemente orientadas a objeto. Agora, se você veio do PHP e outras linguagens dinâmicas (de script), não vai sentir falta de nada.

Para que serve Node.js?

Serve para fazer o que você quiser, de sites à scripts de automação. Os usos ideais de Node.js são:

  • Serve para fazer APIs. Esse é o principal uso da tecnologia, que por default ela sabe processar requisições. Seu modelo não bloqueante de tratar as requisições torna excelente para essa tarefa, consumindo pouquíssimo hardware.
  • Serve para fazer aplicações de tempo real. Usando algumas extensões web socket como Socket.io, Comet.io, etc cria-se aplicações de tempo real sem onerar o seu servidor como acontecia com Java, etc.
  • Serve para fazer backend de jogos, IoT e apps de mensagens, ótimo usar Node.js para APIs nesses casos (backend-as-a-service) devido ao alto volume de requisições que esse tipo de aplicações efetuam.

A principal atribuição do Node.js é a elaboração de aplicações grandes e pequenas. Sem precisar de um browser que seja responsável pela execução, essa tecnologia libera a criação de soluções em Javascript. Por ter uma grande capacidade de lidar com escalas, a tecnologia é comum em aplicativos e sites que possuem uma carga diária extensa e que hospedam muitos usuários simultâneos.

Isso tudo torna o Node.js ideal para ser usando em Cloud.

O que pode ser usado para estender o Node?

Node.js é apenas uma plataforma para executar aplicações JavaScript. É através do ecossistema do NPM, o gerenciador e principal repositório de pacotes para Node.js, que temos acesso a milhões de pacotes, módulos, bibliotecas, etc. Abaixo, cito apenas algumas possibilidades populares com Node:

  • Node.js + Express. Framework web mais famoso para Node.js. Inclui suporte a diferentes view engines (como EJS), funciona com diversos padrões incluindo MVC, possui JSON e HTTP nativos, bem leve, indispensável para APIs e aplicações web escritas em Node.
  • Node.js + NestJs. Se optar por trabalhar com TypeScript, esse framework facilita muito a vida do programador, por ter um bom CLI que facilita a construção e a organização da arquitetura dos projetos em Node, tornando mais fácil a manutenção de grandes projetos (uma reclamação que ocorre em Node)
  • Node.js + Bancos de Dados: você pode utilizar tanto com bancos relacionais quanto com não-relacionais:

MySQL

PostgreSQL

MS SQL Server

MongoDB

Redis

SQLite

  • Node.js + ReactJS. A principal biblioteca para front-ends modernos e reativos da atualidade.
  • Node.js + Segurança. Tem muita biblioteca pronta para auxiliar a colocar segurança nas suas aplicações Node.js:

- Autenticação de aplicações: Passport, um módulo de autenticação muito versátil e poderoso.

- Autenticação de APIs: JWT, um padrão moderno e largamente utilizado.

Em um próximo artigo, pretendo entrar tecnicamente no assunto, mostrando a minha trajetória de migração do Java para Node.js , com alguns acertos e dificuldades.

Por agora, espero ter deixado você interessado ou até mesmo empolgado, a ponto de investir boas horas do seu tempo estudando essa tecnologia que tem revolucionado e unido as gerações de programadores, mostrando que se reinventar sempre é possível, como o Javascript fez. Você também pode se reinventar, afinal nada é imutável, nem nas empresas, nas tecnologias e muito menos nos códigos, que a cada momento pedem novos conhecimentos e desafios.

Bons estudos, bons códigos e boa evolução!

--

--