{"id":57381,"date":"2022-07-12T08:20:25","date_gmt":"2022-07-12T07:20:25","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=57381&#038;post_type=knowledgebase&#038;preview_id=57381"},"modified":"2025-10-01T20:46:32","modified_gmt":"2025-10-01T19:46:32","slug":"nodejs-fs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/","title":{"rendered":"Il Modulo del File System di Node.js (FS)"},"content":{"rendered":"<p>JavaScript \u00e8 stato a lungo uno dei linguaggi di scripting pi\u00f9 popolari, ma per un lungo periodo di tempo non \u00e8 stato una grande scelta per lo sviluppo di applicazioni backend lato server. Poi \u00e8 arrivato Node.js, che viene utilizzato per creare applicazioni leggere, guidate dagli eventi e sviluppate lato server utilizzando il linguaggio di programmazione JavaScript.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/it\/blog\/node-js\/\" rel=\"noopener\">Node.js \u00e8 un runtime JavaScript open-source<\/a> che pu\u00f2 essere scaricato e installato gratuitamente su tutti i principali sistemi operativi (Windows, Mac, Linux). Negli ultimi anni \u00e8 diventato sempre pi\u00f9 <a href=\"https:\/\/kinsta.com\/it\/blog\/app-node-js\/\" rel=\"noopener\">popolare tra i creatori di app<\/a> e ha fornito <a href=\"https:\/\/kinsta.com\/it\/blog\/retribuzione-sviluppatore-node-js\/\" rel=\"noopener\">molte nuove opportunit\u00e0 di lavoro<\/a> per gli sviluppatori JavaScript in cerca di una specializzazione.<\/p>\n\n<p>In questo articolo scopriremo come gestire il file system utilizzando Node.js. \u00c8 facile utilizzare le API di Node.js per interagire con il file system ed eseguire operazioni complesse.<\/p>\n<p>Cominciamo!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Prerequisiti per Comprendere il File System di Node.js<\/h2>\n<p>Il prerequisito principale \u00e8 l&#8217;installazione di Node.js sul sistema operativo. Node.js non richiede un hardware avanzato, per cui \u00e8 facile <a href=\"https:\/\/kinsta.com\/it\/blog\/come-installare-node-js\/\" rel=\"noopener\">scaricare e installare Node.js<\/a> sul proprio computer.<\/p>\n<p>Per lavorare sui moduli di Node.js come i file system (noti anche come &#8220;FS&#8221; o &#8220;fs&#8221;) \u00e8 utile avere una <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-javascript\/\" rel=\"noopener\">conoscenza di base di JavaScript<\/a>. Una conoscenza di alto livello delle funzioni, delle callback e delle promises di JavaScript <a href=\"https:\/\/kinsta.com\/it\/blog\/miglior-linguaggio-di-programmazione\/#javascript\">aiuter\u00e0 a capire ancora pi\u00f9 velocemente l&#8217;argomento<\/a>.<\/p>\n<h2>Modulo File System di Node.js<\/h2>\n<p>Lavorare con file e directory \u00e8 una delle esigenze fondamentali di un&#8217;applicazione full-stack. Gli utenti dell&#8217;app potrebbero voler caricare immagini, curriculum o altri file su un server. Allo stesso tempo, l&#8217;applicazione potrebbe aver bisogno di leggere i file di configurazione, spostare i file o addirittura modificarne i permessi in modo programmatico.<\/p>\n<p>Il modulo del file system di Node.js si occupa di tutti questi aspetti. Fornisce diverse API per interagire con i file system senza problemi. La maggior parte delle API sono personalizzabili con opzioni e flag. \u00c8 anche possibile utilizzarle per eseguire operazioni sia sincrone che asincrone sui file.<\/p>\n<p>Prima di approfondire il modulo del file system, diamo una sbirciatina al modulo di Node.js.<\/p>\n<h3>I Moduli di Node.js<\/h3>\n<p>I moduli di Node.js sono un insieme di funzionalit\u00e0 disponibili come API che possono essere utilizzate da un programma utente. Ad esempio, esiste il modulo <code>fs<\/code> per interagire con il file system. Allo stesso modo, un modulo <code>http<\/code> utilizza le sue funzioni per creare un server ed eseguire molte altre operazioni. Node.js offre numerosi moduli per astrarre molte funzionalit\u00e0 di basso livello.<\/p>\n<p>\u00c8 anche possibile creare i propri moduli. Con Node.js versione 14 e successive, potete creare e utilizzare i moduli Node.js in due modi: Moduli CommonJS (CJS) e moduli ESM (MJS). Tutti gli esempi che vedremo in questo articolo sono in stile CJS.<\/p>\n<h2>Lavorare con i File in Node.js<\/h2>\n<p>Lavorare con i file comporta diverse operazioni con i file e le directory (cartelle). Ora conosceremo ognuna di queste operazioni con un esempio di codice sorgente. Aprite il vostro <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-di-revisione-del-codice\/\">editor di codice<\/a> preferito e provatele mentre leggete.<\/p>\n<p>Per prima cosa, importate il modulo <code>fs<\/code> nel vostro file sorgente per iniziare a lavorare con i metodi del file system. Nello stile CJS, utilizziamo il metodo <code>require<\/code> per importare un metodo da un modulo. Quindi, per importare e utilizzare i metodi del modulo fs, dovete procedere in questo modo:<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');<\/code><\/pre>\n<p>Si noti che stiamo importando il metodo <code>writeFile<\/code> dal pacchetto <code>fs\/promises<\/code>. Vogliamo utilizzare i metodi promeses perch\u00e9 sono i pi\u00f9 recenti e sono facili da usare con le parole chiave async\/await e richiedono meno codice. Alternative sono i metodi sincroni e le funzioni di callback che vedremo pi\u00f9 avanti.<\/p>\n<h3>Come Creare e Scrivere su un File<\/h3>\n<p>Potete creare e scrivere su un file in tre modi:<\/p>\n<ol>\n<li>Con il metodo <code>writeFile<\/code><\/li>\n<li>Con il metodo <code>appendFile<\/code><\/li>\n<li>Con il metodo <code>openFile<\/code><\/li>\n<\/ol>\n<p>Questi metodi accettano il percorso di un file e i dati da scrivere nel file. Se il file esiste, sostituiscono il contenuto del file. Altrimenti, creano un nuovo file con il contenuto.<\/p>\n<h4>1. Il Metodo writeFile<\/h4>\n<p>Il frammento di codice che segue mostra come utilizzare il metodo <code>writeFile<\/code>. Iniziate creando un file chiamato <strong>createFile.js<\/strong> e inserite il frammento di codice sottostante:<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');\nasync function writeToFile(fileName, data) {\n  try {\n    await writeFile(fileName, data);\n    console.log(`Wrote data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to write the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Nota che stiamo usando la parola chiave <code>await<\/code> per invocare il metodo che restituisce una promessa JavaScript. Una promessa andata a buon fine creer\u00e0\/scriver\u00e0 il file. Abbiamo un blocco try-catch per gestire gli errori nel caso in cui la promessa venga rifiutata.<\/p>\n<p>Ora possiamo invocare la funzione <code>writeToFile<\/code>:<\/p>\n<pre><code class=\"language-js\">writeToFile('friends.txt', 'Bob');<\/code><\/pre>\n<p>Quindi, aprite un prompt dei comandi o un terminale ed eseguite il programma di cui sopra utilizzando il seguente comando:<\/p>\n<pre><code class=\"language-bash\">node createFile.js<\/code><\/pre>\n<p>Verr\u00e0 creato un nuovo file chiamato <strong>friends.txt<\/strong> con una riga che dice semplicemente:<\/p>\n<pre><code class=\"language-html\">Bob<\/code><\/pre>\n<h4>2. Il Metodo appendFile<\/h4>\n<p>Come dice il nome, questo metodo viene utilizzato principalmente per aggiungere e modificare un file. Tuttavia, potete utilizzare lo stesso metodo anche per creare un file.<\/p>\n<p>Date un&#8217;occhiata alla funzione qui sotto. Utilizziamo il metodo <code>appendFile<\/code> con il flag <code>w<\/code> per scrivere un file. Il flag predefinito per l&#8217;aggiunta a un file \u00e8 <code>a<\/code>:<\/p>\n<pre><code class=\"language-js\">const { appendFile} = require('fs\/promises');\n\nasync function appendToFile(fileName, data) {\n  try {\n    await appendFile(fileName, data, { flag: 'w' });\n    console.log(`Appended data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to append the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ora potete richiamare la funzione di cui sopra in questo modo:<\/p>\n<pre><code class=\"language-js\">appendToFile('activities.txt', 'Skiing');<\/code><\/pre>\n<p>Successivamente, potete eseguire il codice nell&#8217;ambiente Node.js utilizzando il comando node, come abbiamo visto in precedenza. In questo modo verr\u00e0 creato un file chiamato <strong>activities.txt<\/strong> con il contenuto <code>Skiing<\/code>.<\/p>\n<h4>3. Il Metodo open<\/h4>\n<p>L&#8217;ultimo metodo che utilizzeremo per creare e scrivere su un file \u00e8 il metodo <code>open<\/code>. Potete aprire un file utilizzando il flag <code>w<\/code> (per &#8220;write&#8221;):<\/p>\n<pre><code class=\"language-js\">const { open} = require('fs\/promises');\n\nasync function openFile(fileName, data) {\n  try {\n    const file = await open(fileName, 'w');\n    await file.write(data);\n    console.log(`Opened file ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to open the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ora richiamate la funzione <code>openFile<\/code> con:<\/p>\n<pre><code class=\"language-js\">openFile('tasks.txt', 'Do homework');<\/code><\/pre>\n<p>Quando eseguirete lo script con il comando node, verr\u00e0 creato un file chiamato <strong>tasks.txt<\/strong> con il contenuto iniziale:<\/p>\n<pre><code class=\"language-html\">Do homework<\/code><\/pre>\n<h3>Come Leggere un File<\/h3>\n<p>Ora che sappiamo come creare e scrivere su un file, vediamo come leggerne il contenuto. Per farlo, utilizzeremo il metodo <code>readFile<\/code> del modulo del file system.<\/p>\n<p>Create un file chiamato <strong>readThisFile.js<\/strong> con il seguente codice:<\/p>\n<pre><code class=\"language-js\">\/\/ readThisFile.js\nconst { readFile } = require('fs\/promises');\nasync function readThisFile(filePath) {\n  try {\n    const data = await readFile(filePath);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(`Got an error trying to read the file: {error.message}`);\n }\n}<\/code><\/pre>\n<p>Ora leggiamo tutti e tre i file che abbiamo creato invocando la funzione <code>readThisFile<\/code>:<\/p>\n<pre><code class=\"language-js\">readThisFile('activities.txt');\nreadThisFile('friends.txt');\nreadThisFile('tasks.txt');<\/code><\/pre>\n<p>Infine, eseguite lo script utilizzando il seguente comando node:<\/p>\n<pre><code class=\"language-bash\">node readThisFile.js<\/code><\/pre>\n<p>Dovreste vedere il seguente output nella console:<\/p>\n<pre><code class=\"language-html\">Skiing\nDo homework\nBob<\/code><\/pre>\n<p>Un punto da notare: Il metodo <code>readFile<\/code> legge il file in modo asincrono. Ci\u00f2 significa che l&#8217;ordine in cui viene letto il file e l&#8217;ordine in cui viene stampata la risposta nella console potrebbero non essere gli stessi. Bisogna usare la versione sincrona del metodo <code>readFile<\/code> per ottenere l&#8217;ordine. Lo vedremo tra poco.<\/p>\n<h3>Come Rinominare un File<\/h3>\n<p>Per rinominare un file, usate il metodo rename del modulo fs. Creiamo un file chiamato <strong>rename-me.txt<\/strong>. Rinomineremo questo file in modo programmatico.<\/p>\n<p>Create un file chiamato <strong>renameFile.js<\/strong> con il seguente codice:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\n\nasync function renameFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Renamed ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to rename the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Come avrete notato, il metodo rename richiede due argomenti. Uno \u00e8 il file con il nome di origine e l&#8217;altro \u00e8 il nome di destinazione.<\/p>\n<p>Ora invochiamo la funzione di cui sopra per rinominare il file:<\/p>\n<pre><code class=\"language-js\">const oldName = \"rename-me.txt\";\nconst newName = \"renamed.txt\";\nrenameFile(oldName, newName);<\/code><\/pre>\n<p>Come in precedenza, eseguite il file di script utilizzando il comando node per rinominare il file:<\/p>\n<pre><code class=\"language-bash\">node renameFile.js<\/code><\/pre>\n<h3>Come Spostare un File<\/h3>\n<p>Spostare un file da una directory all&#8217;altra \u00e8 come rinominarne il percorso. Quindi, possiamo utilizzare il metodo <code>rename<\/code> per spostare i file.<\/p>\n<p>Creiamo due cartelle, <strong>from<\/strong> e <strong>to<\/strong>. Poi creeremo un file chiamato <strong>move-me.txt<\/strong> all&#8217;interno della cartella <strong>from<\/strong>.<\/p>\n<p>Successivamente, scriveremo il codice per spostare il file <strong>move-me.txt<\/strong>. Create un file chiamato <strong>moveFile.js<\/strong> con il seguente frammento:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\nconst { join } = require('path');\nasync function moveFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Moved ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to move the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Qui stiamo usando il metodo <code>rename<\/code> proprio come prima. Ma perch\u00e9 dobbiamo importare il metodo <code>join<\/code> dal modulo <code>path<\/code> (s\u00ec, il percorso \u00e8 un altro modulo fondamentale di Node.js)?<\/p>\n<p>Il metodo <code>join<\/code> viene utilizzato per unire diversi segmenti di percorso specificati per formare un unico percorso. Lo useremo per formare il percorso dei nomi dei file di origine e di destinazione:<\/p>\n<pre><code class=\"language-js\">const fromPath = join(__dirname, \"from\", \"move-me.txt\");\nconst destPath = join(__dirname, \"to\", \"move-me.txt\");\nmoveFile(fromPath, destPath);<\/code><\/pre>\n<p>Ed ecco fatto! Se eseguite lo script <strong>moveFile.js<\/strong>, vedrete il file <strong>move-me.txt<\/strong> spostato nella cartella <strong>to<\/strong>.<\/p>\n<h3>Come Copiare un File<\/h3>\n<p>Utilizziamo il metodo <code>copyFile<\/code> del modulo <code>fs<\/code> per copiare un file dall&#8217;origine alla destinazione.<\/p>\n<p>Date un&#8217;occhiata al frammento di codice qui sotto:<\/p>\n<pre><code class=\"language-js\">const { copyFile } = require('fs\/promises');\nconst { join } = require('path');\nasync function copyAFile(from, to) {\n  try {\n    await copyFile(from, to);\n    console.log(`Copied ${from} to ${to}`);\n  } catch (err) {\n    console.error(`Got an error trying to copy the file: ${err.message}`);\n  }\n}<\/code><\/pre>\n<p>Ora potete invocare la funzione di cui sopra con:<\/p>\n<pre><code class=\"language-js\">copyAFile('friends.txt', 'friends-copy.txt');<\/code><\/pre>\n<p>Questo copier\u00e0 il contenuto del file <strong>friends.txt<\/strong> nel file <strong>friends-copy.txt<\/strong>.<\/p>\n<p>\u00c8 fantastico, ma come si fa a copiare pi\u00f9 file?<\/p>\n<p>Potete utilizzare l&#8217;API <code>Promise.all<\/code> per eseguire pi\u00f9 promesse in parallelo:<\/p>\n<pre><code class=\"language-js\">async function copyAll(fromDir, toDir, filePaths) {\n  return Promise.all(filePaths.map(filePath =&gt; {\n   return copyAFile(join(fromDir, filePath), join(toDir, filePath));\n  }));\n}<\/code><\/pre>\n<p>Ora potete fornire tutti i percorsi dei file da copiare da una directory all&#8217;altra:<\/p>\n<pre><code class=\"language-js\">copyFiles('from', 'to', ['copyA.txt', 'copyB.txt']);<\/code><\/pre>\n<p>Potete seguire questo approccio anche per eseguire altre operazioni come lo spostamento, la scrittura e la lettura di file in parallelo.<\/p>\n<h3>Come Eliminare un File<\/h3>\n<p>Per eliminare un file utilizziamo il metodo <code>unlink<\/code>:<\/p>\n<pre><code class=\"language-js\">const { unlink } = require('fs\/promises');\nasync function deleteFile(filePath) {\n  try {\n    await unlink(filePath);\n    console.log(`Deleted ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ricordate che dovrete fornire il percorso del file per eliminarlo:<\/p>\n<pre><code class=\"language-js\">deleteFile('delete-me.txt');<\/code><\/pre>\n<p>Se il percorso \u00e8 un link simbolico a un altro file, il metodo unlink canceller\u00e0 il link simbolico, ma il file originale non verr\u00e0 toccato. Parleremo pi\u00f9 avanti dei link simbolici.<\/p>\n<h3>Come Cambiare i Permessi e la Propriet\u00e0 dei File<\/h3>\n<p>A volte potreste voler cambiare i permessi dei file in modo programmatico. Pu\u00f2 essere molto utile per rendere un file di sola lettura o completamente accessibile.<\/p>\n<p>Utilizzeremo il metodo <code>chmod<\/code> per modificare i permessi di un file:<\/p>\n<pre><code class=\"language-js\">const { chmod } = require('fs\/promises');\nasync function changePermission(filePath, permission) {\n  try {\n    await chmod(filePath, permission);\n    console.log(`Changed permission to ${permission} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change permission: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Possiamo passare il percorso del file e la bitmask del permesso per modificare il permesso.<\/p>\n<p>Ecco la chiamata alla funzione per cambiare i permessi di un file in sola lettura:<\/p>\n<pre><code class=\"language-js\">changePermission('permission.txt', 0o400);<\/code><\/pre>\n<p>Analogamente ai permessi, \u00e8 possibile anche cambiare la propriet\u00e0 di un file in modo programmatico. Per farlo utilizziamo il metodo <code>chown<\/code>:<\/p>\n<pre><code class=\"language-js\">const { chown } = require('fs\/promises');\n\nasync function changeOwnership(filePath, userId, groupId) {\n  try {\n    await chown(filePath, userId, groupId);\n    console.log(`Changed ownership to ${userId}:${groupId} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change ownership: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Quindi invochiamo la funzione con il percorso del file, l&#8217;ID utente e l&#8217;ID gruppo:<\/p>\n<pre><code class=\"language-js\">changeOwnership('ownership.txt', 1000, 1010);<\/code><\/pre>\n<h3>Come Creare un Link Simbolico<\/h3>\n<p>Il <a href=\"https:\/\/kinsta.com\/blog\/managing-wordpress-development-with-symlinks\/\" rel=\"noopener\">collegamento simbolico (noto anche come symlink)<\/a> \u00e8 un concetto del filesystem che permette di creare un collegamento a un file o a una cartella. I link simbolici vengono creati per creare dei collegamenti a un file\/cartella di destinazione nel file system. Il modulo Node.js <code>filesystem<\/code> fornisce il metodo <code>symlink<\/code> per creare un link simbolico.<\/p>\n<p>Per creare il link simbolico, dobbiamo passare il percorso del file di destinazione, il percorso del file attuale e il tipo:<\/p>\n<pre><code class=\"language-js\">const { symlink } = require('fs\/promises');\nconst { join } = require('path');\nasync function createSymlink(target, path, type) {\n  try {\n    await symlink(target, path, type);\n    console.log(`Created symlink to ${target} at ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the symlink: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Possiamo invocare la funzione con:<\/p>\n<pre><code class=\"language-js\">createSymlink('join(__dirname, from, symMe.txt)', 'symToFile', 'file');<\/code><\/pre>\n<p>Qui abbiamo creato un link simbolico chiamato <code>symToFile<\/code>.<\/p>\n<h3>Come Osservare le Modifiche a un File<\/h3>\n<p>Sapevate che \u00e8 possibile osservare le modifiche apportate a un file? \u00c8 un ottimo modo per monitorare le modifiche e gli eventi, soprattutto quando non ve li aspettate. Potete catturare e controllare queste modifiche per rivederle in seguito.<\/p>\n<p>Il metodo <code>watch<\/code> \u00e8 il modo migliore per osservare le modifiche di un file. Esiste un metodo alternativo chiamato <code>watchFile<\/code>, ma non \u00e8 cos\u00ec performante come il metodo <code>watch<\/code>.<\/p>\n<p>Finora abbiamo utilizzato il metodo del modulo del file system con le parole chiave async\/await. Vediamo come usare la funzione di callback con questo esempio.<\/p>\n<p>Il metodo <code>watch<\/code> accetta come argomenti il percorso del file e una funzione di callback. Ogni volta che viene eseguita un&#8217;attivit\u00e0 sul file, viene richiamata la funzione <code>callback<\/code>.<\/p>\n<p>Possiamo sfruttare il parametro <code>event<\/code> per ottenere maggiori informazioni sulle attivit\u00e0:<\/p>\n<pre><code class=\"language-js\">const fs = require('fs');\nfunction watchAFile(file) {\n  fs.watch(file, (event, filename) =&gt; {\n    console.log(`${filename} file Changed`);\n  });\n}<\/code><\/pre>\n<p>Invocate la funzione passando il nome del file a <code>watch<\/code>:<\/p>\n<pre><code class=\"language-js\">watchAFile('friends.txt');<\/code><\/pre>\n<p>Ora stiamo catturando automaticamente tutte le attivit\u00e0 sul file <strong>friends.txt<\/strong>.<\/p>\n<h2>Lavorare con le Directory (Cartelle) in Node.js<\/h2>\n<p>Vediamo ora come eseguire operazioni sulle directory o sulle cartelle. Molte operazioni come rinominare, spostare e copiare sono simili a quelle gi\u00e0 viste per i file. Tuttavia, alcuni metodi e operazioni specifiche sono utilizzabili solo sulle directory.<\/p>\n<h3>Come Creare una Directory<\/h3>\n<p>Per creare una directory utilizziamo il metodo <code>mkdir<\/code>. \u00c8 necessario passare il nome della directory come argomento:<\/p>\n<pre><code class=\"language-js\">const { mkdir } = require('fs\/promises');\nasync function createDirectory(path) {\n  try {\n    await mkdir(path);\n    console.log(`Created directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ora possiamo invocare la funzione <code>createDirectory<\/code> con un percorso di directory:<\/p>\n<pre><code class=\"language-js\">createDirectory('new-directory');<\/code><\/pre>\n<p>In questo modo verr\u00e0 creata una directory denominata <strong>new-directory<\/strong>.<\/p>\n<h3>Come Creare una Directory Temporanea<\/h3>\n<p>Le directory temporanee non sono directory normali. Hanno un significato speciale per il sistema operativo. Potete creare una directory temporanea utilizzando il metodo <code>mkdtemp()<\/code>.<\/p>\n<p>Creiamo una cartella temporanea all&#8217;interno della directory temporanea del sistema operativo. Otteniamo le informazioni sulla posizione della directory temporanea dal metodo <code>tmpdir()<\/code> del modulo <code>os<\/code>:<\/p>\n<pre><code class=\"language-js\">const { mkdtemp } = require('fs\/promises');\nconst { join } = require('path');\nconst { tmpdir } = require('os');\nasync function createTemporaryDirectory(fileName) {\n  try {\n    const tempDirectory = await mkdtemp(join(tmpdir(), fileName));\n    console.log(`Created temporary directory ${tempDirectory}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the temporary directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ora invochiamo la funzione con il nome della cartella per crearla:<\/p>\n<pre><code class=\"language-js\">createTemporaryDirectory('node-temp-file-');<\/code><\/pre>\n<p>Node.js aggiunger\u00e0 sei caratteri casuali alla fine del nome della cartella temporanea creata per mantenerlo unico.<\/p>\n<h3>Come Eliminare una Cartella<\/h3>\n<p>Per rimuovere\/eliminare una directory bisogna utilizzare il metodo <code>rmdir()<\/code>:<\/p>\n<pre><code class=\"language-js\">const { rmdir } = require('fs\/promises');\nasync function deleteDirectory(path) {\n  try {\n    await rmdir(path);\n    console.log(`Deleted directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Quindi, richiamate la funzione di cui sopra passando il percorso della cartella che volete rimuovere:<\/p>\n<pre><code class=\"language-js\">deleteDirectory('new-directory-renamed');<\/code><\/pre>\n<h2>API sincrone e asincrone<\/h2>\n<p>Finora abbiamo visto molti esempi di metodi per il file system e tutti sono stati utilizzati in modo asincrono. Tuttavia, potreste aver bisogno di gestire alcune operazioni in modo sincrono.<\/p>\n<p>Un esempio di operazione sincrona \u00e8 la lettura di pi\u00f9 file uno dopo l&#8217;altro. Il modulo <code>fs<\/code> ha un metodo chiamato <code>readFileSync()<\/code> per eseguire questa operazione:<\/p>\n<pre><code class=\"language-js\">const { readFileSync } = require('fs');\nfunction readFileSynchronously(path) {\n  try {\n    const data = readFileSync(path);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(error);\n  }\n}<\/code><\/pre>\n<p>Il metodo <code>readFileSync()<\/code> non \u00e8 richiesto dal pacchetto &#8220;fs\/promises&#8221;. Questo perch\u00e9 il metodo non \u00e8 asincrono. Quindi, potete chiamare la funzione di cui sopra con:<\/p>\n<pre><code class=\"language-js\">readFileSynchronously('activities.txt');\nreadFileSynchronously('friends.txt');\nreadFileSynchronously('tasks.txt');<\/code><\/pre>\n<p>In questo caso, tutti i file verranno letti nell&#8217;ordine in cui sono state chiamate le funzioni.<\/p>\n<p>Il modulo del file system di Node.js offre un metodo sincrono per altre operazioni come quella di lettura. Utilizzateli con attenzione e solo in caso di necessit\u00e0. I metodi asincroni sono molto pi\u00f9 utili per l&#8217;esecuzione parallela.<\/p>\n<h2>Gestire gli Errori<\/h2>\n<p>Come ogni coder sa bene, bisogna <a href=\"https:\/\/kinsta.com\/it\/blog\/errori-in-javascript\/\" target=\"_blank\" rel=\"noopener noreferrer\">aspettarsi sempre degli errori ed essere pronti a gestirli<\/a> quando si eseguono operazioni su un file o una directory. Cosa succede se il file non viene trovato o se non avete il permesso di scrivere su un file? Ci possono essere (e probabilmente ci saranno) molti casi in cui potreste imbattervi in un errore.<\/p>\n<p>Dovreste sempre racchiudere le vostre chiamate di metodo in un blocco try-catch. In questo modo, se si verifica un errore, il controllo passer\u00e0 al blocco catch, dove potrete esaminare e gestire l&#8217;errore. Come avrete notato in tutti gli esempi precedenti, abbiamo utilizzato il blocco try-catch per gestire gli errori che abbiamo incontrato.<\/p>\n\n<h2>Riepilogo<\/h2>\n<p>Rivediamo i punti chiave che abbiamo trattato in questo tutorial:<\/p>\n<ul>\n<li>Il modulo del file system (fs) di Node.js ha molti metodi che aiutano a svolgere molte attivit\u00e0 di basso livello.<\/li>\n<li>\u00c8 possibile eseguire diverse operazioni sui file come creare, scrivere, rinominare, copiare, spostare, cancellare e molte altre.<\/li>\n<li>\u00c8 possibile eseguire diverse operazioni sulle directory, come creare, creare una directory temporanea, spostare e molte altre.<\/li>\n<li>Tutti i metodi possono essere invocati in modo asincrono utilizzando promesse JavaScript o funzioni di callback.<\/li>\n<li>Se necessario, \u00e8 anche possibile invocare i metodi in modo sincrono.<\/li>\n<li>Preferite sempre i metodi asincroni a quelli sincroni.<\/li>\n<li>Gestite gli errori con un blocco try-catch ogni volta che interagisci con i metodi.<\/li>\n<\/ul>\n<p>Ora che abbiamo lavorato un po&#8217; con il file system di Node.js, dovreste avere una buona padronanza delle sue caratteristiche. Se volete migliorare ulteriormente il vostro know-how, potreste approfondire gli <a href=\"https:\/\/nodejs.org\/api\/stream.html\" target=\"_blank\" rel=\"noopener noreferrer\">stream di Node.js<\/a> come naturale evoluzione dell&#8217;apprendimento dei moduli di Node.js. Gli stream permettono di gestire lo scambio di informazioni, comprese le chiamate di rete, la lettura\/scrittura di file e molto altro ancora.<\/p>\n<p>Troverete tutto il codice sorgente utilizzato in questo articolo in <a href=\"https:\/\/github.com\/atapas\/nodeX\/tree\/main\/fs-module\" target=\"_blank\" rel=\"noopener noreferrer\">questo repository GitHub<\/a>.<\/p>\n<p>Avete intenzione di utilizzare Node.js per il vostro prossimo progetto? Diteci perch\u00e9 l&#8217;hai scelto nella sezione dei commenti qui sotto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript \u00e8 stato a lungo uno dei linguaggi di scripting pi\u00f9 popolari, ma per un lungo periodo di tempo non \u00e8 stato una grande scelta per &#8230;<\/p>\n","protected":false},"author":242,"featured_media":57382,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[25637,25648,25627,25985],"topic":[25918,26203],"class_list":["post-57381","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-framework-javascript","tag-javascript","tag-node-js","tag-npm","topic-framework-javascript","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Il Modulo del File System di Node.js (FS)<\/title>\n<meta name=\"description\" content=\"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Il Modulo del File System di Node.js (FS)\" \/>\n<meta property=\"og:description\" content=\"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-12T07:20:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:46:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tapas Adhikary\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tapas Adhikary\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\"},\"author\":{\"name\":\"Tapas Adhikary\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\"},\"headline\":\"Il Modulo del File System di Node.js (FS)\",\"datePublished\":\"2022-07-12T07:20:25+00:00\",\"dateModified\":\"2025-10-01T19:46:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\"},\"wordCount\":2488,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg\",\"keywords\":[\"Framework JavaScript\",\"JavaScript\",\"node.js\",\"npm\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\",\"name\":\"Il Modulo del File System di Node.js (FS)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg\",\"datePublished\":\"2022-07-12T07:20:25+00:00\",\"dateModified\":\"2025-10-01T19:46:32+00:00\",\"description\":\"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Framework JavaScript\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/framework-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Il Modulo del File System di Node.js (FS)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\",\"name\":\"Tapas Adhikary\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"caption\":\"Tapas Adhikary\"},\"description\":\"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/tapasadhikary\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Il Modulo del File System di Node.js (FS)","description":"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/","og_locale":"it_IT","og_type":"article","og_title":"Il Modulo del File System di Node.js (FS)","og_description":"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.","og_url":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-07-12T07:20:25+00:00","article_modified_time":"2025-10-01T19:46:32+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg","type":"image\/jpeg"}],"author":"Tapas Adhikary","twitter_card":"summary_large_image","twitter_description":"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpeg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Tapas Adhikary","Tempo di lettura stimato":"16 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/"},"author":{"name":"Tapas Adhikary","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f"},"headline":"Il Modulo del File System di Node.js (FS)","datePublished":"2022-07-12T07:20:25+00:00","dateModified":"2025-10-01T19:46:32+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/"},"wordCount":2488,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg","keywords":["Framework JavaScript","JavaScript","node.js","npm"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/","url":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/","name":"Il Modulo del File System di Node.js (FS)","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg","datePublished":"2022-07-12T07:20:25+00:00","dateModified":"2025-10-01T19:46:32+00:00","description":"Hai difficolt\u00e0 a navigare nel modulo del file system di Node.js? Impara da questi esempi come usare file e directory con le API del modulo fs.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/07\/nodejs-fs.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/nodejs-fs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Framework JavaScript","item":"https:\/\/kinsta.com\/it\/argomenti\/framework-javascript\/"},{"@type":"ListItem","position":3,"name":"Il Modulo del File System di Node.js (FS)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f","name":"Tapas Adhikary","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","caption":"Tapas Adhikary"},"description":"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.","url":"https:\/\/kinsta.com\/it\/blog\/author\/tapasadhikary\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/57381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/242"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=57381"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/57381\/revisions"}],"predecessor-version":[{"id":63002,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/57381\/revisions\/63002"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/57381\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/57382"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=57381"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=57381"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=57381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}