Falar de Node.JS, para um iniciante, com a abordagem dos Frameworks existentes, é colocar um bebê para correr após os primeiros passos.


Artigo originalmente escrito no medium, essa é uma revisão e atualização você encontra o original aqui.

Antes de corrermos, precisamos entender o que é Node.JS e o que pode fazer por nós, depois falamos sobre os frameworks e outras ferramentas. Para entender a motivação por trás desse artigo, leia o artigo inicial.

Javascript no servidor

De modo simples o Node.JS permite executar JavaScript do lado do servidor e era mantido pela empresa Joyent e hoje é mantido pela LTF (Linux Team Foundation). Um mito muito comum é dizerem que NodeJS é "revolucionário” por fazer isso.

A Microsoft já tinha formas de executar, através do IIS, códigos Javascript rodando do lado do servidor para as páginas em ASP desde 1997. Mas pelo que NodeJS é revolucionário? Diferente do jScript, ele atende melhor aos padrões da ECMA-262 e tem por assim dizer um “Google Chrome” (por favor notem as aspas) executando ele, e muda a abordagem que as manipulações de entrada e saída dos dados acontecem e permite que sejam tratadas de forma assíncrona. Essa é a explicação simples.

Conhecendo a fundo

Para conhecer bem o chão que vamos pisar é bom saber do que ele é feito. Não vou entrar muito em detalhes, mas se quiserem saber bem a respeito do workflow de execução, recomendo esse artigo sobre NodeJS . (Apesar de um pouco antigo, as coisas não mudaram tanto, e abordarei, mais sobre o assunto e com detalhes em um artigo futuro).

O Node.JS foi construído usando a engine de JavaScript V8 a mesma do Google Chrome (por isso falei para notar as aspas, não é o Google Chrome é só a engine JavaScript usada por ele).

Javascript antes era conhecido por ser uma linguagem lenta. As melhorias feitas na V8 para executar JavaScript fez com que a execução ficasse muito mais rápido, e para isso mudou a forma de execução do código. Outro ponto é a entrada e saída assíncrona dos dados garantindo alta performance, utilizando os sistemas de eventos dos sistemas operacionais.

Algumas limitações acontecem, como ser single thread (em 2018 já existem alguns projetos que contorna isso), mas você pode usar poder das linguagens C e C++ para adicionar ao Node.JS módulos para processamento de dados pesados expondo as funcionalidades que você precise.

Pontos a considerar sobre o Javascript

Tratando-se de JavaScript é bom lembrar alguns pontos.

JavaScript é uma linguagem multi-paradigma, principalmente orientada a eventos. Essa orientação à eventos, permitiu que a mágica aconteça no Node.JS e que uma aplicação tenha um funcionamento assíncrono aos eventos ocorridos.

O lado ruim de ser assincrono são os callbacks (funções chamadas após acontecer um evento) e sem o devido cuidado podem gerar o que chamamos de callback hell. Para isso podemos usar algumas técnicas e que envolvem o uso de promessas, async/await e será explicado em um artigo futuro.

Desmistificando Node.JS

Antes do código é bom desmistificar algumas coisas. O Node.JS, não é um substituto do JavaScript no browser, apesar de você poder pré-processar algumas coisas como requisições AJAX para uma API, ou pré-compilar códigos escrito para o seu front-end.

É bom entender que Node.JS executa no lado servidor e usa Javascript como padrão de linguagem, então você está programando uma aplicação de servidor para executar rotinas e ações como programaria para PHP, Ruby, .Net e Java.

O NodeJS não resolve todos os problemas de uma aplicação com problemas de escala, principalmente quando ela trabalha com muitos dados e processamento pesado. Pense bem na sua arquitetura, você não vai tentar matar uma mosca com uma bazuca, do mesmo jeito que não adianta você tentar acabar com uma cidade usando um arco e flecha. {;)