O Node.js é um runtime JavaScript que permite executar código JavaScript fora do navegador. Ele foi criado em 2009 por Ryan Dahl e, desde então, tornou-se uma das tecnologias mais populares para desenvolvimento back-end, ferramentas de linha de comando e aplicações de rede. Com o Node.js, você pode usar JavaScript tanto no cliente quanto no servidor, unificando a linguagem em todo o stack de desenvolvimento.

Nesta aula, vamos explorar o que é o Node.js, como ele funciona como um runtime fora do navegador, como criar e executar seu primeiro script, e quais são as principais diferenças entre o ambiente do Node.js e o ambiente do navegador. Ao final, você terá uma base sólida para começar a desenvolver aplicações com Node.js.

O que é

Node.js é um ambiente de execução (runtime) JavaScript construído sobre o motor V8 do Google Chrome. Ele permite que o JavaScript seja executado no servidor, fora do navegador, possibilitando a criação de aplicações back-end, APIs, ferramentas de linha de comando, automação e muito mais. Diferente de linguagens como PHP ou Python, que precisam de um servidor web para rodar, o Node.js é um runtime completo que pode ser executado diretamente no sistema operacional.

O Node.js é baseado em um modelo de I/O não bloqueante e orientado a eventos, o que o torna extremamente eficiente para aplicações que lidam com muitas operações de entrada e saída, como servidores web, chatbots e sistemas de tempo real. Ele também possui um ecossistema gigante de pacotes, gerenciado pelo npm (Node Package Manager), que permite adicionar funcionalidades prontas aos seus projetos com facilidade.

Para instalar o Node.js, basta acessar o site oficial (nodejs.org) e baixar o instalador para o seu sistema operacional. Após a instalação, você pode verificar a versão instalada com o comando node --version no terminal.

// Verificando a versão do Node.js no terminal
$ node --version
v20.11.0

Runtime fora do browser

O Node.js é um runtime fora do navegador, o que significa que ele fornece um ambiente de execução para JavaScript que não depende de um navegador. Isso é possível porque o Node.js inclui o motor V8, que interpreta e executa o JavaScript, além de oferecer APIs próprias para acesso ao sistema de arquivos, rede, processos, etc.

Diferente do navegador, onde o JavaScript é executado em um ambiente restrito e voltado para manipulação do DOM, no Node.js você pode fazer coisas como ler e escrever arquivos, criar servidores HTTP, conectar-se a bancos de dados e interagir com o sistema operacional. Isso abre um mundo de possibilidades para o desenvolvimento de aplicações back-end.

Um exemplo simples é o módulo fs (file system), que permite ler arquivos do disco. Veja como ler um arquivo de texto:

// leitura de arquivo com Node.js
const fs = require('fs');

fs.readFile('mensagem.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Erro ao ler o arquivo:', err);
    return;
  }
  console.log('Conteúdo do arquivo:', data);
});

Esse código lê o arquivo mensagem.txt de forma assíncrona, ou seja, não bloqueia a execução enquanto espera a leitura terminar. Essa é uma das principais características do Node.js: ser assíncrono e não bloqueante, o que permite lidar com muitas operações simultâneas sem travar o sistema.

Primeiro script

Vamos criar nosso primeiro script em Node.js. Para isso, você precisa ter o Node.js instalado. Crie um arquivo chamado ola.js com o seguinte conteúdo:

// ola.js
console.log('Olá, mundo!');

Para executar o script, abra o terminal na pasta onde o arquivo está salvo e digite:

$ node ola.js
Olá, mundo!

Pronto! Você acabou de executar seu primeiro script em Node.js. O comando node seguido do nome do arquivo executa o código JavaScript contido nele.

Você também pode usar o Node.js em modo interativo, chamado REPL (Read-Eval-Print Loop), digitando apenas node no terminal. Isso abre um prompt onde você pode digitar comandos JavaScript diretamente:

$ node
> 2 + 2
4
> console.log('Olá')
Olá
undefined
> .exit

O REPL é útil para testar pequenos trechos de código e explorar as APIs do Node.js.

Diferenças do browser

Embora o JavaScript seja a mesma linguagem no navegador e no Node.js, os ambientes são diferentes. Aqui estão as principais diferenças:

  • Objeto global: No navegador, o objeto global é window, que contém o DOM e outras APIs. No Node.js, o objeto global é global, que não tem acesso ao DOM.
  • Módulos: No navegador, o código é geralmente dividido em scripts e carregado via tags script. No Node.js, usamos o sistema de módulos CommonJS (ou ES Modules) para importar e exportar código entre arquivos.
  • APIs: O navegador oferece APIs como fetch, localStorage, document, etc. O Node.js oferece APIs para sistema de arquivos, rede, processos, etc.
  • I/O: No navegador, a entrada e saída são limitadas (por exemplo, via fetch para requisições HTTP). No Node.js, você pode ler e escrever arquivos, criar servidores, etc.
  • Execução: No navegador, o código é executado em um ambiente de segurança que impede acesso ao sistema de arquivos. No Node.js, você tem acesso total ao sistema operacional.

Vamos ver um exemplo prático: como criar um servidor HTTP simples com Node.js. Isso não é possível no navegador.

// servidor.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Olá, mundo!\n');
});

server.listen(3000, () => {
  console.log('Servidor rodando em http://localhost:3000/');
});

Execute o script com node servidor.js e acesse http://localhost:3000 no seu navegador para ver a mensagem.

Boas práticas e observações finais

Ao trabalhar com Node.js, é importante adotar algumas boas práticas:

  • Use módulos: Divida seu código em módulos para facilitar a manutenção e reutilização.
  • Prefira código assíncrono: Use callbacks, Promises ou async/await para evitar bloquear o event loop.
  • Trate erros: Sempre trate erros em operações de I/O e em outras chamadas assíncronas.
  • Mantenha o código limpo: Siga padrões de estilo e boas práticas de JavaScript.

Nesta aula, você aprendeu o que é o Node.js, como executar scripts e as principais diferenças em relação ao navegador. Na próxima aula, vamos aprofundar em módulos e no npm.

Referências

Exercícios

  1. Explique com suas palavras o que é o Node.js e qual a principal diferença entre o JavaScript no navegador e no Node.js.

    ✓ Resposta: O Node.js é um ambiente de execução JavaScript fora do navegador, baseado no motor V8. A principal diferença é que no navegador o JavaScript é voltado para manipulação do DOM e interação com o usuário, enquanto no Node.js você tem acesso ao sistema de arquivos, rede e outras APIs do sistema operacional, permitindo criar aplicações back-end.
  2. Crie um script Node.js que imprima seu nome e sua idade no console. Execute-o e mostre a saída.

    ✓ Resposta: Crie um arquivo meus-dados.js com o seguinte conteúdo:
    console.log('Maria da Silva');
    console.log(30);
    Execute com node meus-dados.js. A saída será:
    Maria da Silva
    30
  3. Escreva um script que leia um arquivo de texto chamado dados.txt e imprima seu conteúdo no console. Use o módulo fs.

    ✓ Resposta:
    const fs = require('fs');
    fs.readFile('dados.txt', 'utf8', (err, data) => {
      if (err) throw err;
      console.log(data);
    });
  4. O que é o REPL do Node.js e para que ele serve? Dê um exemplo de uso.

    ✓ Resposta: O REPL é um ambiente interativo que permite executar código JavaScript diretamente no terminal. Basta digitar node e pressionar Enter. Exemplo:
    $ node
    > 1 + 1
    2
    > console.log('Olá, Node!')
    Olá, Node!
    undefined
    > .exit
  5. Cite três diferenças entre o ambiente do navegador e o do Node.js.

    ✓ Resposta: 1. Objeto global: no navegador é window, no Node é global.
    2. APIs: o navegador tem DOM e APIs de cliente; o Node tem módulos como fs, http.
    3. Módulos: no navegador usamos script tags; no Node usamos CommonJS/ES Modules.