Envoi de données par pièces dans node.js express

Je cherchais sur le Web et dans la documentation de node.js module express et il semble qu’il n’y ait aucun moyen d’envoyer des données par parties. J’ai un fichier rendu pas très rapide et je veux envoyer des parties avant que tout soit rendu.

Donc, voici mes questions:

  1. Existe-t-il une méthode de response pour envoyer des données par parties?
  2. Qu’est-ce que response.end() ?
  3. S’il n’y a aucun moyen d’envoyer des données par parties – quelle est la raison derrière? Je dirais que cela semble plus bloquant que non bloquant si c’est vrai. Le navigateur peut charger des informations plus rapidement si les données sont fournies plus tôt.

Exemple de code simplifié:

 app.get(..) { renderFile(file, function(data) { response.send(data); }); response.end(); ) 

Ce morceau de code envoie uniquement le premier bloc de données. J’ai vérifié – les données sont données correctement et le rappel est appelé plus d’une fois.

Bien sûr, je peux append des données à une variable, puis écrire response.send(data); mais je n’aime pas cette approche – ce n’est pas ainsi que cela devrait fonctionner.

L’object de response est un stream accessible en écriture. Il suffit d’écrire dessus et Express configurera même automatiquement le codage par blocs.

 response.write(chunk); 

Vous pouvez également y accéder si tout ce qui crée ce “fichier” se présente comme un stream lisible. http://nodejs.org/api/stream.html

Express étend Connect qui étend HTTP, je crois. En regardant l’ API HTTP , il semble que ce que vous recherchez, c’est response.write , qui prend un bloc de données à envoyer comme corps de réponse. Je crois alors que vous pouvez utiliser response.end sur le signal final.

Pour ce faire, il suffit de convertir les données en un stream lisible et de les diriger vers l’object de réponse. voici mon code nodejs. espérons que cela pourrait aider

 var express= require('express'); var bodyParser = require('body-parser'); const JSONStreamSsortingngify = require('json-stream-ssortingngify'); var app=express(); var jsonParser = bodyParser.json(); app.post('/node_test_pipe', jsonParser, function (req, res) { console.log("Request from:"+req.url); var obj={ my:1, two:2 } JSONStreamSsortingngify(obj).pipe(res); var obj={ my:3, two:4 } JSONStreamSsortingngify(obj).pipe(res); }); app.listen(8080); 

L’object de réponse peut être écrit. Dans votre cas, ce qui suit serait une solution:

 renderFile(file, function(data) { response.send(data); }); response.end(); 

Si vous avez la possibilité d’obtenir le fichier sous forme de stream, vous pouvez le rationaliser davantage:

 file.getReadableStream().pipe(response);