Introdução ao NodeJS

Introdução ao NodeJS

Olá leitor, seja muito bem vindo a introdução da Jornada de NodeJS 🥳

Se você chegou até aqui, é porque tem algum interesse em aprender a desenvolver aplicações back-end (e também front-end), por meio do ambiente de desenvolvimento chamado de NodeJS.

Antes de continuarmos, é necessário que você entenda que o NodeJS não é uma linguagem de programação, mas sim um ambiente de desenvolvimento que faz o uso da linguagem Javascript, para criar aplicações do lado do servidor.

É importante ressaltar também, que o NodeJS não é uma biblioteca ou um framework, ok?

Se você participou da Jornada Javascript, sabe que a linguagem foi criada exclusivamente para ser executada no navegador do usuário, sendo considerada por padrão, uma linguagem de programação do tipo Client Side.

Isso continuou sendo assim durante anos, até que algum desenvolvedor parou e pensou... "A linguagem Javascript é tão facil de se trabalhar... uma pena que ela só pode ser executada no navegador do usuário... bem que poderiamos criar aplicações back-end com ela, não é verdade? 🤔".

E foi a partir daí, mais especificamente no "bem que poderíamos" que o ambiente NodeJS foi criado 😉

Antes de continuarmos...

Antes de continarmos essa jornada, é necessário que você preencha alguns requisitos:

Aqui no Portal da Micilini, nós temos uma jornada bem completa que vai te ensinar Javascript, vale a pena dar uma conferida 😉

Preencheu todos os requisitos? Se sente seguro para continuar? Então bora aprender NodeJS!

A história do NodeJS

No dia 27 de maio de 2009, um novo ambiente de desenvolvimento chamado de Node.JS, foi originalmente criado por Ryan Dahl, um estudante de doutorado em matemática.

Antes disso, Ryan Dahl descobriu sua paixão pelo desenvolvimento web quando decidiu entrar em contato com as linguagens PHP e Ruby.

Onde começou a fazer o uso do Mongrel, um servidor web feito exclusivamente para aplicações criadas em Ruby.

Em 2005, Ryan Dahl procurava uma maneira elegante de implementar uma barra de progresso para um pequeno sistema de uploads de arquivos.

Entretanto, a tecnologia disponível na época era insuficiente para realizar tal feito, ainda mais com as poucas funcionalidades existentes no Mongrel.

Com isso, Ryan iniciou sua busca pela linguagem de programação mais adequada para resolver o seu problema, chegando a adotar abordagens por meio da linguagem C e Haskell.

No entanto, Ryan não estava totalmente satisfeito com as soluções e as implementações que encontrará, até que ele finalmente chegou na linguagem Javascript!

Enfim ele percebeu que essa linguagem poderia atender todos os seus requisitos, de modo a resolver o problema da barra de progresso no sistema de upload.

Naquela época, o Javascript já estava estabelecido como uma linguagem de programação para web, então há de se imaginar que já haviam motores poderoses disponíveis no mercado, e um número relativamente grande de desenvolvedores.

Em janeiro de 2009, Ryan começou a implementar um novo ambiente de desenvolvimento baseado em Javascript, de modo que qualquer desenvolvedor pudesse criar aplicações server-side usando esta linguagem.

Eis então que surge o nascimento do NodeJS.

Um pouco mais de história...

Durante a conferência JSConf EU que aconteceu em novembro de 2009 em Berlim, Ryan decide então, apresentar o seu mais novo ambiente de desenvolvimento baseado em Javascript.

Caso a sua apresentação fosse um sucesso, e ele conseguisse patrocinadores para apoiar seu trabalho no NodeJS, ele poderia continuar seu envolvimento com a sua ferramenta... caso contrário, quase um ano de trabalho teria sido em vão.

Dito e feito, a apresentação tinha se tornado um sucesso, e como resultado, ele conseguiu o patrocínio da Joyent, um provedor de software e serviços com sede em São Francisco, que oferece soluções de hospedagem e infraestrutura em nuvem.

Com isso, a Joyent fez com que o NodeJS se tornasse um software de código aberto, de modo a disponibiliza-lo em seu portfólio de produtos e serviços, como parte de suas ofertas de hospedagem.

Ryan Dahl foi então contratado pela Joyent, e tornou-se mantenedor em tempo integral do NodeJS a partir de então.

De resto você já sabe o que aconteceu, né? Não é a toa que estamos aqui nessa jornada 😆

O que é o NodeJS?

O NodeJS é um ambiente de desenvolvimento, que atua como um servidor online de código aberto baseado em Javascript, permitindo que os desenvolvedores criem aplicações do lado do servidor (server-side) usando essa linguagem.

Isso possibilita a criação de aplicações web completas, usando uma única linguagem de programação, que pode ser usada tanto no navegador (client-side) quanto no servidor (server-side).

Por vezes, o NodeJS também é chamado é conhecido como uma runtime de Javascript, que nada mais é do que um ambiente de execução capaz de abrir e executar aquivos com a extenção .js.

O NodeJS foi contruído em cima do motor V8 do Google Chrome, fornecendo assim uma execução rápida do código Javascript.

Uma das caracteristicas principais do NodeJS, é que ele é assíncrono, isso significa que ele é projetado para responder a eventos, conseguindo lidar com um grande número de operações simultâneas de forma eficiente.

Uma outra questão sobre ele, é devido ao seu suporte ao sistema de módulos, facilitando a organização e reutilização do código.

Durante a jornada, você vai conhecer diversos modulos suportados pelo NodeJS, módulos estes que foram construídos e são mantidos pela própria comunidade de desenvolvedores.

Então mais pra frente, veremos módulos que se comunicam com APIs, módulos de edição de vídeo, de imagens, módulos de gerenciamento de arquivos, módulos de rotas, módulos de segurança e afins.

E sim, se você tiver o conhecimento necessário poderá desenvolver seus próprios módulos em NodeJS.

Uma característica interessante, é que como sabemos, o NodeJS é baseado em Javascript, o que acelera (e muito) o desenvolvimento das nossas aplicações web.

Mas daí você pode estar me perguntando:

Que tipo de aplicações podemos fazer com o NodeJS?

Com o NodeJS, você pode desenvolver uma ampla variedade de aplicações, como por exemplo:

  • Qualquer tipo de aplicação web: landing page, site institucional, loja virtual, e-commerce, blogs, redes sociais e afins.
  • APIs RestFull.
  • Qualquer tipo de aplicação em tempo real: chat online, jogos online, aplicações que envolvem o uso de sockets e afins.
  • Ferramentas de linha de comandos (CLI).
  • Aplicações Móveis: onde pode atuar fornecendo a lógica de negócios, autenticação, e interação com bancos de dados.
  • Microserviços.
  • Aplicações de Streaming: vídeo, audio e arquivos.

É importante ressaltar que cada projeto é diferente, e devemos fazer a escolha da melhor tecnologia pensando na escalabilidade das nossas aplicações.

É possível criar aplicações web usando NodeJS?

Sim, hoje já existem varias bibliotecas que tornam a construção de aplicações desktop possíveis, são elas:

O que é o V8?

O V8 nada mais é do que um motor de Javascript e WebAssembly de código aberto disponibilizado pelo Google.

Ele apresenta um alto desempenho quanto a leitura e execução de códigos Javascript, uma vez que ele foi escrito na linguagem C++.

É claro, é o motor que roda atrás do NodeJS.

Isso significa que o NodeJS pode executar códigos que foram escritos em C++?

Sim! No entanto, isso não quer dizer que vamos precisar escrever códigos em C++ para criar aplicações NodeJS, ok?

Lembra que eu falei que o NodeJS é baseado em módulos? Então, existem alguns módulos que se comunicam com arquivos que foram escritos em C++, através "bindings" (vínculos) entre o código NodeJS e o código em C++, tudo isso por meio de uma biblioteca chamada "N-API" (Node-API).

Isso faz com que o NodeJS tenha uma grande vantagem com relação a outras linguagens, uma vez que conseguimos nos comunicar com sistemas de baixo nível, escrevendo em uma linguagem de alto nível 😍

Tudo isso de forma super integrada e com alta performance.

Basicamente, o NodeJS atua como uma ponte entre o Javascript e o C++, pegando nossos arquivos escritos em linguagem Javascript, e jogando para o C++ fazer a interpretação e execução, de modo que nossas aplicações sejam executadas de forma mais rápida.

O que é o NPM?

Um outro personagem que estará sempre presente durante a sua jornada como desenvolvedor em NodeJS, é o NPM (Node Package Manager).

Ele é um gerenciador de pacotes do NodeJS, criado por Isaac Schlueter em 12 de janeiro de 2010, como forma de desempenhar um papel fundamental na gestão de dependências, e na distribuição de pacotes de projetos em NodeJS.

Para que você possa entender melhor como o NPM funciona, vamos voltar para uma época em que ele ainda não tinha sido lançado no mercado (antes de 2010).

Quando criávamos um projeto web, como por exemplo, um e-commerce, tinhamos a nossa disposição algumas bibliotecas e módulos que exerciam algumas funcionalidades distintas, como por exemplo:

  • Uma classe que se comunicava com meios de pagamentos, como PayPal, Mercado Pago e entre outras.
  • Uma função que adicionava mais segurança nas transações de dados.
  • Uma classe responsável por retornar a taxa de entrega dos correios e afins...

Essas bibliotecas (ou módulos), eram criadas por desenvolvedores que tinham por objetivo principal, ajudar a comunidade disponibilizando soluções de código aberto onde qualquer um poderia usar.

Evitando assim, que você precisasse criar uma lógica do zero para implementar uma funcionalidade, uma vez que, alguem já criou e disponibilizou essa lógica pra você, o que garante uma grande economia de tempo.

Você por exemplo, poderia criar um módulo ou uma biblioteca que se comunicasse com um PinPad para fazer a gestão de pagamentos físicos, e depois, disponibilizar esse módulo para que a comunidade consiga se comunicar com um PinPad, sem que eles precisassem quebrar a cabeça pra isso (pois você já quebrou a cabeça por eles 😂)

Fazendo uma alusão ao mundo real, quando você quer construir uma casa, você pode fazer isso de duas formas:

  • Totalmente do zero: coletando areia, criando argamassa, cortando arvores para montar seus proprios móveis, criando seus próprios azulejos, criando sua máquina de lavar, sua propria televisão, construindo sua propria porta, usando química para criar tinta de parede... (Ou seja, você precisaria ter conhecimentos em matemática, física, química, engenharia, robótica e afins).
  • Usando Modulos: Comprando azulejo pronto, móveis prontos, portas prontas, máquina de lavar, fogão, geladeira, pisos... (Aqui você já compra objetos prontos, precisando apenas organiza-los).

Construir sua propria cara do zero absoluto poderia levar anos (ou uma vida inteira), já construir uma casa usando módulos acaba saindo bem mais barato e muito mais rapido 😆

E se você for para para pensar, hoje em dia tudo é um módulo, o seu smartphone por exemplo, ele não foi criado usando a tecnologia de uma única empresa, uma vez que as telas, capacitores, processadores, portas, circuito, fios... foram criados por empresas diferentes, e organizados de forma a criar o smartphone.

Hoje você não precisa criar uma bicicleta do zero, você pode comprar as peças separadas de forma a montar aquilo que chamamos de bicicleta.

Legal, agora que você já entende um pouco mais sobre o que são Módulos e Bibliotecas, vamos voltar á época em que o NPM não tinha sido lançado.

Antes do NPM, nós desenvolvedores precisávamos gerenciar manualmente as dependências dos nossos projetos, esse processo envolvia baixar bibliotecas manualmente para garantir que tudo estivesse atualizado.

Por exemplo, supondo que estivéssemos criando um e-commerce, e decidíssemos usar uma biblioteca de pagamento feito por um terceiro.

Nós deveriamos sempre ficar de olho com relação as novas versões dessa biblioteca. Pois caso contrário, isso poderia gerar problemas na performance e principalmente na segurança de nossas aplicações.

Surgia uma nova atualização? Então nós baixávamos a nova versão, e colocávamos dentro dos arquivos do nosso projeto.

Não havendo uma maneira eficiente de compartilhar, empacotar e instalar bibliotecas de terceiros.

Com a chegada do NPM, o cenário mudou um pouco, agora nós somos capazes de gerenciar todos os módulos e suas versões com poucas linhas de comando 🤩

E o melhor, o NPM nos mantem informado sobre as novas versões disponíveis, onde com poucas linhas de comando, conseguimos fazer essa atualização 🤩

O que você vai aprender nesta jornada?

Nesta jornada serão abordados diversos conteúdos relacionados a NodeJS, e que fazem parte do seu ecossistema:

  • Fundamentos do NodeJS,
  • NPM,
  • MongoDB,
  • Express,
  • Sequelize (ORM),
  • APIs,
  • Template Engines,
  • Arquiteturas MVC,
  • Core Modules,
  • e muito mais 😁

Pronto para aprender a instalar o NodeJS na sua máquina?

Então te espero na próxima lição 🙂