var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Erreur : le contenu est indéfini. Pouvez-vous m'aider ?
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Erreur : le contenu est indéfini. Pouvez-vous m'aider ?
7 ans ont passé :) fs.readFileSync
est une méthode de synchronisation, donc pas besoin de await
là. Await est utile avec les promesses ( nodejs.org/api/fs.html#fs_fs_promesses_api ), lorsque vous souhaitez écrire du code asynchrone avec une syntaxe similaire au code synchrone.
@karaxuna, oui, retiré. Je viens de rencontrer ce cas aujourd'hui et je l'ai résolu en utilisant le code ci-dessus.
const fs = require('fs')
function readDemo1(file1) {
return new Promise(function (resolve, reject) {
fs.readFile(file1, 'utf8', function (err, dataDemo1) {
if (err)
reject(err);
else
resolve(dataDemo1);
});
});
}
async function copyFile() {
try {
let dataDemo1 = await readDemo1('url')
dataDemo1 += '\n' + await readDemo1('url')
await writeDemo2(dataDemo1)
console.log(dataDemo1)
} catch (error) {
console.error(error);
}
}
copyFile();
function writeDemo2(dataDemo1) {
return new Promise(function(resolve, reject) {
fs.writeFile('text.txt', dataDemo1, 'utf8', function(err) {
if (err)
reject(err);
else
resolve("Promise Success!");
});
});
}
Utilisez la bibliothèque promiseify intégrée (Node 8+) pour rendre ces anciennes fonctions de rappel plus élégantes.
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
async function doStuff() {
try {
const content = await readFile(filePath, 'utf8');
console.log(content);
} catch (e) {
console.error(e);
}
}
Comme dit, fs.readFile
est une action asynchrone. cela signifie que lorsque vous dites à node de lire un fichier, vous devez considérer que cela prendra un certain temps et que pendant ce temps, node continue à exécuter le code suivant. dans votre cas, c'est : console.log(content);
.
C'est comme envoyer une partie du nœud pour un long voyage (comme la lecture d'un gros fichier).
Jetez un coup d'œil à mes commentaires :
var content;
// node, go fetch this file. when you come back, please run this "read" callback function
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
// in the meantime, please continue and run this console.log
console.log(content);
c'est pourquoi content
est toujours vide lorsque vous l'enregistrez. Le nœud n'a pas encore récupéré le contenu du fichier.
Cela pourrait être résolu en déplaçant console.log(content)
dans la fonction de rappel, juste après content = data;
. de cette façon, vous verrez le journal lorsque le nœud a terminé de lire le fichier et après content
obtient une valeur.
Lecture synchrone et asynchrone de fichiers :
//fs module to read file in sync and async way
var fs = require('fs'),
filePath = './sample_files/sample_css.css';
// this for async way
/*fs.readFile(filePath, 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
});*/
//this is sync way
var css = fs.readFileSync(filePath, 'utf8');
console.log(css);
Node Cheat Disponible sur lire_fichier .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Fs.readFileSync possède également des fonctionnalités intéressantes pour lire un fichier même s'il est au format unicode utf8.
0 votes
N.B. fs.readFile peut aussi faire cela ^ voir ma réponse ci-dessous