Validação Rápida de Acesso a Arquivos em Node.js com fs.promises.access
Tentar ler ou gravar arquivos sem verificar previamente as permissões do sistema operacional pode causar falhas inesperadas na aplicação e interromper a execução do código. O uso de fs.promises.access permite checar de forma assíncrona se o processo possui as permissões necessárias para manipular um arquivo ou diretório antes de iniciar qualquer operação de I/O.
JavaScript
const fs = require('fs/promises');
const constants = require('fs').constants;
/**
* Verifica se um arquivo ou diretório possui permissões de leitura e escrita.
* @param {string} caminho - Caminho do arquivo ou diretório.
* @return {Promise<boolean>} Retorna true se houver acesso ou false em caso de restrição.
*/
async function verificarPermissoes(caminho) {
try {
// R_OK verifica leitura, W_OK verifica escrita usando operação OU bitwise (|)
await fs.access(caminho, constants.R_OK | constants.W_OK);
return true;
} catch {
// Lança exceção caso o arquivo não exista ou as permissões sejam negadas
return false;
}
}
// --- Exemplo Prático de Uso ---
(async () => {
const caminhoArquivo = './dados_config.json';
// Prepara o arquivo de teste no sistema de arquivos
await fs.writeFile(caminhoArquivo, JSON.stringify({ ambiente: 'producao' }));
const temAcesso = await verificarPermissoes(caminhoArquivo);
if (temAcesso) {
console.log(`[Sucesso] O arquivo '${caminhoArquivo}' está pronto para leitura e escrita.`);
} else {
console.error(`[Erro] Sem permissões suficientes para manipular '${caminhoArquivo}'.`);
}
})();
Pontos-chave
- Constantes de Acesso (
constants): O método aceita flags comoconstants.F_OK(existência do arquivo),constants.R_OK(leitura) econstants.W_OK(escrita), combinadas através do operador bitwise|. - Fluxo Baseado em Exceções: Em caso de ausência do arquivo ou negação de permissão no SO, o método rejeita a Promise disparando um erro (ex:
ENOENTouEACCES), devendo ser encapsulado em blocostry/catch. - Prevenção de Condições de Corrida (Race Conditions): Segundo a documentação oficial do Node.js, não se deve usar
accessimediatamente antes deopen/read/writeem pipelines normais; a checagem é recomendada apenas para cenários preventivos ou inicialização de serviços. - Sintaxe Moderna com
fs/promises: Permite o consumo nativo viaasync/awaitcom limpeza no código, eliminando a necessidade de callbacks tradicionais ou funções utilitárias comopromisify.
