📢 Nuovo Corso Laravel API disponibile!

Statistiche sui file in Node.js

Ogni file è corredato da un insieme di dettagli che possiamo ispezionare utilizzando Node.js, in particolare attraverso il metodo stat() fornito dal modulo fs.

Lo chiami passando un percorso del file e, una volta che Node.js ottiene i dettagli del file, chiamerà la funzione di callback che passi, con due parametri: un messaggio di errore e le statistiche del file:

const fs = require("node:fs");
fs.stat("/Users/joe/test.txt", (err, stats) => {
if (err) {
console.error(err);
}
// abbiamo accesso alle statistiche del file in `stats`
});

Node.js fornisce anche un metodo sincrono, che blocca il thread fino a quando le statistiche del file sono pronte:

const fs = require("node:fs");
try {
const stats = fs.statSync("/Users/joe/test.txt");
} catch (err) {
console.error(err);
}

Le informazioni sul file sono incluse nella variabile stats. Quali informazioni possiamo estrarre usando le statistiche?

Molte, tra cui:

  • se il file è una directory o un file, usando stats.isFile() e stats.isDirectory()
  • se il file è un collegamento simbolico usando stats.isSymbolicLink()
  • la dimensione del file in byte usando stats.size.

Ci sono altri metodi avanzati, ma la maggior parte di ciò che userai nella tua programmazione quotidiana è questo:

const fs = require("node:fs");
fs.stat("/Users/joe/test.txt", (err, stats) => {
if (err) {
console.error(err);
return;
}
stats.isFile(); // true
stats.isDirectory(); // false
stats.isSymbolicLink(); // false
stats.size; // 1024000 //= 1MB
});

Puoi anche utilizzare il metodo fsPromises.stat() basato su promesse offerto dal modulo fs/promises se preferisci:

const fs = require("node:fs/promises");
async function example() {
try {
const stats = await fs.stat("/Users/joe/test.txt");
stats.isFile(); // true
stats.isDirectory(); // false
stats.isSymbolicLink(); // false
stats.size; // 1024000 //= 1MB
} catch (err) {
console.log(err);
}
}
example();

Puoi leggere ulteriori informazioni sul modulo fs nella documentazione ufficiale.