Biblioteca Padrão JavaScript (Node.js): Visão Geral Completa
Node.js é um ambiente de execução JavaScript, construído sobre o motor V8. Uma de suas principais vantagens é a rica biblioteca padrão, que fornece centenas de módulos prontos para resolver tarefas cotidianas do desenvolvimento backend: desde trabalhar com o sistema de arquivos até criar servidores HTTP. Neste artigo, veremos os principais módulos, suas capacidades e daremos exemplos práticos de código.
1. Módulo fs (File System)
O módulo fs é a base para trabalhar com arquivos e diretórios. Suporta operações síncronas e assíncronas.
- Leitura de arquivo (assíncrona):
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data);});- Escrita em arquivo:
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => { if (err) throw err; console.log('Arquivo salvo');});- Trabalhando com diretórios (criação, exclusão, leitura):
// Criando pastafs.mkdir('newDir', { recursive: true }, (err) => { if (err) throw err; console.log('Pasta criada');});
// Lendo conteúdo da pastafs.readdir('.', (err, files) => { console.log(files); // array de nomes de arquivos});2. Módulo path
O módulo path simplifica o trabalho com caminhos de arquivos e pastas, independentemente do sistema operacional.
- Junção de caminhos:
const path = require('path');
const fullPath = path.join('users', 'admin', 'docs', 'file.txt');console.log(fullPath); // users/admin/docs/file.txt (no Linux) ou users\\admin\\docs\\file.txt (no Windows)- Obtendo a extensão do arquivo:
const ext = path.extname('image.png');console.log(ext); // '.png'- Normalização de caminho (remove ".." e "." extras):
const normalized = path.normalize('/foo/bar//baz/asdf/quux/..');console.log(normalized); // /foo/bar/baz/asdf3. Módulo http
Permite criar servidores e clientes HTTP. É neste módulo que frameworks como Express.js são construídos.
- Servidor HTTP simples:
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 na porta 3000');});- Cliente HTTP (fazendo requisição GET):
http.get('http://jsonplaceholder.typicode.com/posts/1', (res) => { let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => console.log(JSON.parse(data)));});4. Módulo events
Implementa o padrão "Observador" (EventEmitter). Permite criar eventos personalizados e se inscrever neles.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// Inscrição no eventomyEmitter.on('greet', (name) => { console.log(`Olá, ${name}!`);});
// Geração do eventomyEmitter.emit('greet', 'Alex'); // Olá, Alex!5. Módulo buffer
Buffer é um armazenamento temporário para dados binários. É usado ao trabalhar com streams, arquivos, protocolos de rede.
// Criando buffer a partir de uma stringconst buf = Buffer.from('Hello', 'utf8');console.log(buf); // <Buffer 48 65 6c 6c 6f>
// Concatenação de buffersconst buf1 = Buffer.from('Node');const buf2