🗂️ Módulo fs no Node.js: dominando o sistema de arquivos
Se você trabalha com Node.js, dominar o módulo fs (File System) é essencial para criar aplicações robustas e eficientes. Ele permite interagir diretamente com arquivos e diretórios — leitura, escrita, criação e muito mais 🚀
📌 O que é o módulo fs?
O módulo fs é nativo do Node.js e oferece uma API poderosa para manipular o sistema de arquivos de forma assíncrona ou síncrona. Isso significa que você pode trabalhar com arquivos sem travar a execução da sua aplicação — algo crucial para performance em ambientes reais.
⚙️ Principais operações
📁 Criação de diretórios e arquivos
É possível criar pastas e arquivos facilmente utilizando funções
como mkdir e writeFile. Isso permite
estruturar dinamicamente seu projeto ou gerar arquivos
automaticamente.
import fs from "fs/promises";
// Cria um diretório chamado "dados"
await fs.mkdir("dados", { recursive: true });
// Cria (ou sobrescreve) um arquivo com conteúdo inicial
await fs.writeFile("dados/registro.txt", "Primeiro registro\n", "utf-8");
console.log("Diretório e arquivo criados com sucesso!");
✏️ Escrita e atualização de conteúdo
Vemos o uso do método appendFile para adicionar
conteúdo a arquivos existentes. Isso é muito útil para logs,
históricos ou atualizações contínuas de dados.
import fs from "fs/promises";
// Adiciona uma nova linha sem sobrescrever o conteúdo existente
await fs.appendFile("dados/registro.txt", "Nova entrada de log\n", "utf-8");
console.log("Conteúdo adicionado com sucesso!");
📖 Leitura de arquivos
O método readFile é utilizado para acessar o
conteúdo de arquivos, sendo necessário definir o encoding (como
UTF-8) para leitura correta de textos.
import fs from "fs/promises";
// Lê o conteúdo do arquivo como texto
const conteudo = await fs.readFile("dados/registro.txt", "utf-8");
console.log("Conteúdo do arquivo:");
console.log(conteudo);
🔗 Integração com o módulo path
Uma prática recomendada é usar o módulo path junto com o fs, garantindo que os caminhos funcionem corretamente em qualquer sistema operacional. Isso evita erros comuns relacionados a diretórios.
import fs from "fs/promises";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
// Caminho absoluto e portável para qualquer sistema operacional
const caminhoArquivo = path.join(__dirname, "dados", "registro.txt");
const conteudo = await fs.readFile(caminhoArquivo, "utf-8");
console.log(conteudo);
💡 Por que isso importa?
O módulo fs é a base para funcionalidades como:
- ✔️ Upload e download de arquivos
- ✔️ Geração de relatórios
- ✔️ Manipulação de logs
- ✔️ Persistência simples de dados
⚡ Assíncrono vs Síncrono
O módulo fs oferece versões assíncronas
(recomendadas) e síncronas (sufixo Sync) para
cada operação.
- ✔
fs.readFile— assíncrono com callback -
✔
fs.readFileSync— síncrono (bloqueia a thread) -
✔
fs/promises— assíncrono com async/await
💡 Dica de ouro
Prefira sempre a API fs/promises com
async/await. Ela mantém o código limpo, legível e
não bloqueia a event loop, aproveitando ao máximo a
arquitetura non-blocking do Node.js.
🔥 Em resumo
Dominar o fs significa ter controle total sobre arquivos na sua aplicação Node.js — uma habilidade essencial para qualquer desenvolvedor backend.