Introdução ao Node.js
Nesta aula, você aprenderá o que é o Node.js, um runtime JavaScript fora do navegador, como criar e executar seu primeiro script, e as principais diferenças entre o ambiente do Node e o do browser.
Nesta aula, vamos explorar o Node.js, um dos ambientes de execução JavaScript mais populares da atualidade. Se você já está familiarizado com JavaScript no navegador, o Node.js vai expandir seus horizontes, permitindo que você use a mesma linguagem para criar servidores, ferramentas de linha de comando e muito mais. Vamos começar entendendo o que é o Node.js e por que ele é tão importante.
O Node.js foi criado por Ryan Dahl em 2009, com o objetivo de permitir que JavaScript fosse executado fora do navegador. Isso foi possível graças ao motor V8 do Chrome, que é o mesmo motor que interpreta JavaScript no navegador. Com o Node.js, você pode construir aplicações de rede escaláveis, APIs, scripts de automação e até mesmo aplicações desktop, tudo usando JavaScript.
O que é
Node.js é um runtime JavaScript baseado no motor V8 do Chrome. Ele foi projetado para ser leve e eficiente, usando um modelo de I/O não bloqueante e orientado a eventos, o que o torna ideal para aplicações que precisam lidar com muitas conexões simultâneas, como servidores web e APIs.
O Node.js também possui um gerenciador de pacotes chamado npm (Node Package Manager), que é o maior ecossistema de bibliotecas de código aberto do mundo. Com o npm, você pode instalar e gerenciar dependências do seu projeto de forma simples, o que acelera o desenvolvimento e facilita a reutilização de código.
Um dos conceitos fundamentais do Node.js é o loop de eventos (event loop), que permite que o Node.js execute operações de I/O (como ler arquivos ou fazer requisições de rede) de forma assíncrona, sem bloquear a execução do programa. Isso é diferente do modelo tradicional de programação síncrona, onde cada operação espera a anterior terminar. No Node.js, você pode iniciar uma operação e continuar executando outras tarefas, e quando a operação terminar, um callback será chamado.
Runtime fora do browser
No navegador, o JavaScript tem acesso a objetos como window, document e console, que são específicos do ambiente do navegador. No Node.js, esses objetos não existem, mas temos outros como process, Buffer, require e module, que são específicos do Node.
Isso significa que, quando você escreve JavaScript para Node.js, precisa estar ciente de que o ambiente é diferente. Por exemplo, em vez de usar window para acessar variáveis globais, você usa global. Em vez de usar document para manipular o DOM, você não tem DOM, mas pode usar módulos como fs para ler e escrever arquivos.
O Node.js também permite que você execute JavaScript no servidor, o que possibilita criar aplicações full-stack usando apenas uma linguagem. Isso é uma grande vantagem, pois você pode compartilhar código entre o front-end e o back-end, facilitando a manutenção e reduzindo a curva de aprendizado.
Para começar a usar o Node.js, você precisa instalá-lo em sua máquina. A instalação é simples: basta baixar o instalador do site oficial (https://nodejs.org) e seguir as instruções. Após a instalação, você pode verificar se o Node.js foi instalado corretamente executando o comando node -v no terminal, que deve exibir a versão instalada.
Primeiro script
Vamos criar nosso primeiro script em Node.js. Abra seu editor de código preferido e crie um arquivo chamado ola.js com o seguinte conteúdo:
// ola.js
console.log("Olá, Node.js!");
Salve o arquivo e, no terminal, navegue até o diretório onde você o salvou e execute o comando:
node ola.js
Você verá a mensagem "Olá, Node.js!" impressa no terminal. Parabéns, você executou seu primeiro script em Node.js!
Vamos agora criar um script um pouco mais interativo, que utiliza o módulo readline para ler entrada do usuário. Crie um arquivo chamado entrada.js:
// entrada.js
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Qual é o seu nome? ", (nome) => {
console.log(`Olá, ${nome}!`);
rl.close();
});
Execute com node entrada.js e veja a interação no terminal. Esse exemplo mostra como você pode usar módulos nativos do Node.js para criar programas mais complexos.
Diferenças do browser
Uma das principais diferenças entre o Node.js e o browser é a ausência do DOM. No browser, você pode manipular elementos HTML via document, mas no Node.js não há HTML. Isso significa que você não pode usar bibliotecas que dependem do DOM, como jQuery, diretamente no Node.js, a menos que use um ambiente simulado como jsdom.
Outra diferença é o modelo de módulos. No browser, o JavaScript usa o padrão ES6 Modules (import/export), enquanto no Node.js, historicamente, o padrão é o CommonJS (require/module.exports). Desde a versão 12, o Node.js também suporta ES Modules, mas você precisa usar a extensão .mjs ou definir "type": "module" no package.json.
Além disso, no browser, você tem acesso a APIs de rede como fetch, que também está disponível no Node.js desde a versão 18, mas a forma de fazer requisições HTTP no Node.js tradicionalmente é através do módulo http ou de bibliotecas como axios.
O Node.js também possui o objeto process, que fornece informações sobre o ambiente de execução, como argumentos da linha de comando, variáveis de ambiente e o diretório atual. No browser, essas informações são limitadas e acessadas de formas diferentes.
Por fim, o Node.js é usado principalmente para construir aplicações de servidor, enquanto o browser é usado para aplicações de cliente. No Node.js, você pode criar servidores HTTP usando o módulo http ou frameworks como Express, que facilitam o desenvolvimento de APIs.
Boas práticas e observações finais
Ao desenvolver com Node.js, é importante seguir algumas boas práticas: sempre use módulos para organizar seu código, evite variáveis globais, trate erros adequadamente e use async/await para lidar com operações assíncronas de forma mais legível.
Além disso, familiarize-se com o npm e o package.json, pois eles são essenciais para gerenciar dependências e scripts do seu projeto.
Lembre-se de que o Node.js é uma ferramenta poderosa, mas também tem suas particularidades. Com o tempo, você aprenderá a aproveitar ao máximo seus recursos.
Referências
- Node.js - Sobre
- Documentação oficial do Node.js
- MDN JavaScript
- npm - Gerenciador de pacotes
- Guia de início rápido do Node.js
- Express - Framework web para Node.js
Exercícios
- Crie um script Node.js que exiba a mensagem "Bem-vindo ao Node.js!" no console.
- Escreva um script que use o módulo
ospara exibir o sistema operacional e a quantidade de memória livre. - Crie um script que leia um arquivo de texto chamado
dados.txte exiba seu conteúdo no console. - Explique a diferença entre o modelo de módulos CommonJS e ES Modules no Node.js.
- Escreva um script que crie um servidor HTTP simples que responda "Olá, mundo!" para qualquer requisição.
script.js, com o conteúdo: console.log("Bem-vindo ao Node.js!"); e executar com node script.js.const os = require("os");
console.log("Sistema operacional:", os.platform());
console.log("Memória livre (bytes):", os.freemem());const fs = require("fs");
fs.readFile("dados.txt", "utf8", (err, data) => {
if (err) throw err;
console.log(data);
});require e module.exports, enquanto ES Modules usa import e export. O Node.js suporta ambos, mas o CommonJS é o padrão histórico. ES Modules são mais modernos e suportam importação estática, o que permite melhor análise e otimização.const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Olá, mundo!");
});
server.listen(3000, () => {
console.log("Servidor rodando em http://localhost:3000");
});