Monitoramento de Arquivos em Tempo Real em Node.js com fs.watch

Monitoramento de Arquivos em Tempo Real em Node.js com fs.watch

Acompanhar alterações em arquivos de configuração ou diretórios de dados sem precisar reiniciar a aplicação é essencial para criar sistemas reativos e dinâmicos. O método nativo fs.watch do Node.js resolve esse problema ao monitorar o sistema de arquivos em tempo real e disparar eventos imediatamente quando um arquivo é modificado, renomeado ou excluído.

JavaScript

const fs = require('fs');
const path = require('path');

/**
 * Inicia o monitoramento de alterações em um arquivo ou diretório.
 * @param {string} caminhoAlvo - Caminho do arquivo/diretório a ser monitorado.
 */
function monitorarArquivo(caminhoAlvo) {
  console.log(`[Watcher] Monitorando alterações em: ${caminhoAlvo}`);

  // Registra o observador de arquivos no sistema de arquivos nativo
  const watcher = fs.watch(caminhoAlvo, (evento, nomeArquivo) => {
    if (nomeArquivo) {
      console.log(`[Evento: ${evento}] Alteração detectada no arquivo: ${nomeArquivo}`);
    } else {
      console.log(`[Evento: ${evento}] Alteração detectada no alvo.`);
    }
  });

  // Trata erros de permissão ou inexistência do arquivo
  watcher.on('error', (erro) => {
    console.error('[Erro no Watcher]:', erro.message);
  });
}

// --- Exemplo Prático de Uso ---
const arquivoConfig = path.join(__dirname, 'configuracao.json');

// Garante que o arquivo de teste exista antes de monitorar
fs.writeFileSync(arquivoConfig, JSON.stringify({ versao: '1.0.0' }));

// Ativa o monitoramento
monitorarArquivo(arquivoConfig);

// Simula uma alteração assíncrona no arquivo após 1,5 segundo
setTimeout(() => {
  fs.writeFileSync(arquivoConfig, JSON.stringify({ versao: '1.0.1' }));
}, 1500);

Pontos-chave

  • Eventos Nativos do Sistema: O fs.watch utiliza APIs nativas do sistema operacional (inotify no Linux, FSEvents no macOS e ReadDirectoryChangesW no Windows), garantindo alta performance e baixo uso de CPU.
  • Tipos de Eventos (eventType): Retorna principalmente 'change' (conteúdo modificado) ou 'rename' (arquivo criado, deletado ou renomeado no diretório).
  • Inconsistência Transversal em SOs: O parâmetro nomeArquivo no callback não é garantido em todas as plataformas; para monitoramentos complexos e reativos em produção, considere bibliotecas de abstração como chokidar.
  • Disparos Duplicados (Debounce): Alterações de arquivos em alguns sistemas operacionais podem disparar múltiplos eventos 'change' consecutivos para uma única gravação; recomenda-se aplicar uma técnica de debounce caso a operação de resposta seja pesada.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *