Node.js de fs.readFileSync() pour fs.readFile()

Je suis en train d'essayer d'obtenir ma tête autour synchrone vs asynchrone dans Node.js en particulier pour la lecture d'un fichier html.

Dans un gestionnaire de requêtes, la version synchrone que j'utilise, qui fonctionne est la suivante:

var fs = require("fs");
var filename = "./index.html";
var buf = fs.readFileSync(filename, "utf8");

function start(resp) {
    resp.writeHead(200, {"Content-type":"text/html"});
    resp.write(buf);
    resp.end();
    }

exports.start=start; 
  1. Ce serait la version à l'aide readFile() ??
  2. Je comprends que readFile est asynchrone, donc, théoriquement, je devrais attendre que
    le fichier est lu avant de le rendre, de sorte que dois-je introduire
    un addListener? J'ai peut être source de confusion choses différentes.

Edit: j'ai essayé de refactoriser le code comme ceci:

var fs = require("fs");
var filename = "./index.html";
function start (resp) {
    resp.writeHead(200, {"Content-Type":"text/html"});
    fs.readFile(filename, "utf8", function (err, data) {
        if (err) throw err;
        resp.write(data);
        });
    resp.end();
    }

J'obtiens une page blanche, je suppose que c'est parce qu'il doit attendre que toutes les données ont été lues, avant resp.write(data), comment dois-je le signaler?

  • Demandez-vous, quel serait l'équivalent de code si vous étiez à utiliser, readFile() et comment géreriez-vous d'envoyer le contenu de manière asynchrone?
  • Oui, c'est ce que je me demande, quel est l'équivalent du code à l'aide de fs.readFile() ?
  • déplacer le resp.end() au sein de votre rappel. C'est pourquoi vous obtenez une page blanche.
  • Oui, j'ai vu qu'avec lombausch réponse, savez-vous pourquoi j'ai besoin de mettre resp.fin() à l'intérieur de la fonction de rappel? Thx
  • Lors de l'utilisation de méthodes asynchrones, comme readFile dans votre code ci-dessus en vous disant que le programme pour, "lire le contenu d'un fichier, et lorsque vous avez terminé (mot-clé, "quand") lire le contenu, les utiliser comme le corps de la réponse". Sans fournir la resp.end() appeler à l'intérieur de votre rappel (comme vu ci-dessus), le programme appelle readFile et puis tout de suite à des appels resp.end() avant votre rappel a l'heure pour effectuer le resp.write. Cela fait-il sens?
  • Voici une description de ce qui est la logique est à l'œuvre derrière les scènes de readFileSync() stackoverflow.com/a/56110224/4701635

InformationsquelleAutor Bondifrench | 2014-04-04