SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Par Jame Gaglo
1. var http = require('http');
2. var server = http.createServer();
3. server.on('request', function(req, res) {
4. res.writeHead(200, {'Content-Type': 'text/plain'});
5. res.write('Hello World!');
6. res.end();
7. });
8. server.listen(4000);
2par James Gaglo
Sur la ligne 1 vous obtenez le module http, à partir duquel
vous pouvez créer un objet serveur en appelant
http.createServer () (ligne 2).
Vous pouvez alors écouter les événements request, qui se
produisent quand un nouveau client se connecte. La
fonction de rappel de l'événement fourni a deux
arguments: les objets request et response. Vous pouvez
alors utiliser l'objet request pour connaître les détails
au sujet de cette requête et utiliser l'objet response pour
répondre au client pour le client.
3par James Gaglo
Lors de l'écoute d'événements request, la fonction de callback
obtient un objet http.ServerRequest comme premier
argument. Cet objet contient les attributs url ,method et headers
que nous pouvons inspecter.
 req.url: Cet attribut contient l'URL de la requête en tant que
chaine de caractère.
Exemple pour l'analyser:
require('http').createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(req.url);
}).listen(4000);
 req.method: Il contient la méthode HTTP utilisée par la
requête :GET, POST, DELETE, ou HEAD.
4par James Gaglo
 req.headers: Celui-ci contient un objet avec une
propriété pour chaque en-tête HTTP sur le
demande. Pour l'analyser, vous pouvez exécuter le
serveur:
var util = require('util');
require('http').createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(util.inspect(req.headers));
}).listen(4000);
util.inspect () est une fonction utilitaire qui analyse les
propriétés de n'importe quel objet.
5par James Gaglo
Quand vous obtenez l'événement request sur un serveur, vous
n'obtenez pas immédiatement le corps de cette requette,
tout simplement parce qu'il n'est pas encore arrivé. Mais si
vous voulez, vous pouvez écouter
les événements de donnéescar l'objet request est un
ReadStream:
1. var writeStream = ...
2. require('http').createServer(function(req, res) {
3. req.on('data', function(data) {
4. writeStream.write(data);
5. });
6. }).listen(4001);
6par James Gaglo
L'objet response (le second argument de la fonction de
rappel) est utilisée pour répondre
au client. Avec elle, vous pouvez écrire les en-têtes et
écrire le corps.
 Ecrire le Header
Pour écrire une en-tête, utilisez res.writeHead
(statut,headers), où headers est un argument optionnel
avec un objet contenant une propriété pour chaque en-tête
que vous voulez envoyer. Prenons l'exemple suivant:
7par James Gaglo
1. require('http').createServer(function(req, res) {
2. res.writeHead(200, {
3. 'Content-Type': 'text/plain',
4. 'Cache-Control': 'max-age=3600' });
5. res.end('Hello World!');
6. }).listen(4000);
$ curl -i http://localhost:4000 pour voir le résultat
8par James Gaglo
 Modification ou Définition d'un Header
1. res.setHeader(name, value);
Cela ne fonctionne que si vous n'avez pas déjà envoyé un
morceau du corps en utilisant res.write () ou
res.end (). Cela échoue également si vous avez déjà utilisé
res.writeHead () sur cette l’objet response , parce que
les en-têtes serait déjà été envoyé.
9par James Gaglo
 Suppression d’un Header
Vous pouvez supprimer un en-tête que vous avez déjà
mis en appelant res.removeHeader et en fournissant le
nom de l'en-tête:
1. res.removeHeader ('Cache-Control');
Encore une fois, cela ne fonctionne que si les en-têtes de la
réponse n'ont pas déjà été envoyées.
10par James Gaglo
 Rédaction du corps de la réponse
Un serveur HTTP envoie le corps de réponse après l'envoi
de l'en-tête de réponse. Deux façons de le faire :
écrire une chaîne:
1. res.write ('Bonjour');
ou utiliser un tampon existant:
1. var tampon Buffer = new ('Bonjour le monde');
2. res.write (buffer);
11par James Gaglo
 Corps de réponse STREAMING HTTP
Une des grandes caractéristiques de Node est la capacité
de consommer et de produire des flux facilement à
partir de différents
sources. Parce que HTTP est un protocole principal dans
Node, les réponses HTTP ne sont pas différentes.
L'encodage chunked de HTTP permet à un serveur de
continuer d'envoyer des données au client même si la
taille du corps de réponse n'a pas été envoyé. A mons
que vous ne spécifiez un en-tête Content-Length, le
serveur Node HTTP envoie l'en-tête qui suit au client:
Transfer-Encoding: chunked
12par James Gaglo
Quelques exemples de streaming en utilisant cette
fonction du serveur HTTP sont le piping de la sortie
d'un fichier ou d'un autre processus
13par James Gaglo
 Piping d’un fichier
Vous pouvez diriger n'importe quel ReadStream dans la réponse.
Voici un exemple qui redirige un fichier dans la réponse :
1. var fs = require('fs');
2. require('http').createServer(function(req, res) {
3. res.writeHead(200, {'Content-Type': 'video/mp4'});
4. var rs = fs.createReadStream('test.mp4');
5. rs.pipe(res);
6. }).listen(4000);
Si vous ouvrez http://127.0.0.1:4000 sur n'importe quel navigateur
moderne, le film devrait
commencer à jouer immédiatement, même si elle n'est pas
complètement chargé.
14par James Gaglo
 Piping de la sortie d’un autre processus
1. var spawn = require('child_process').spawn;
2. require('http').createServer(function(req, res) {
3. var child = spawn('tail', ['-f', '/var/log/system.log']);
4. child.stdout.pipe(res);
5. res.on('end', function() {
6. child.kill();
7. });
8. }).listen(4000);
15par James Gaglo
Le chemin du fichier est fourni dans l’url comme ceci :
http://localhost:4000/path/to/my/file.txt
1. var path = require('path'),
2. fs = require('fs');
3.
4. require('http').createServer(function(req, res) {
5. var file = path.normalize('.' + req.url);
6. console.log('Trying to serve', file);
7. function reportError(err) {
8. console.log(err);
9. res.writeHead(500);
10. res.end('Internal Server Error');
11. }
16par James Gaglo
12. path.exists(file, function(exists) {
13. if (exists) {
14. fs.stat(file, function(err, stat) {
15. var rs;
16. if (err) {
17. return reportError(err);
18. }
19. if (stat.isDirectory()) {
20. res.writeHead(403); res.end('Forbidden');
21. } else {
22. rs = fs.createReadStream(file);
23. rs.on('error', reportError);
24. res.writeHead(200);
17par James Gaglo
25. rs.pipe(res);
26. }
27. });
28. } else{
29. res.writeHead(404);
30. res.end('Not found');
31. }
32. });
33. }).listen(4000);
18par James Gaglo
Dans cet exemple, nous allons créer un serveur HTTP qui affiche du
texte avec 100 sauts de ligne par seconde
1. require('http').createServer(function(req, res) {
2. res.writeHead(200, {'Content-Type': 'text/plain'});
3. var left = 10;
4. var interval = setInterval(function() {
5. for(var i = 0; i< 100; i++) {
6. res.write(Date.now() + " ");
7. }
8. if (-- left === 0) {
9. clearInterval(interval);
10. res.end();
11. }
12. }, 1000);
13. }).listen(4000);
19par James Gaglo
 Professional Nodejs de Pedro Teixeira
 docs.nodejitsu.com
 http://nodejs.org/api/
20par James Gaglo

Contenu connexe

Tendances

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...Arthur Lutz
 
Installation Et Configuration De Nutch
Installation Et Configuration De NutchInstallation Et Configuration De Nutch
Installation Et Configuration De NutchMohamed Ben Bouzid
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debianyahyaf10
 
Installation et configuration d'apache tomcat
Installation et configuration d'apache tomcatInstallation et configuration d'apache tomcat
Installation et configuration d'apache tomcatManassé Achim kpaya
 
Mis en place d'un herbergement multiple sous centos 6.
Mis en place d'un herbergement multiple sous centos 6.Mis en place d'un herbergement multiple sous centos 6.
Mis en place d'un herbergement multiple sous centos 6.Manassé Achim kpaya
 
Java Content Repository avec Jackrabbit
Java Content Repository avec JackrabbitJava Content Repository avec Jackrabbit
Java Content Repository avec JackrabbitEmmanuel Hugonnet
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
Configuration dns sous linux
Configuration  dns sous linuxConfiguration  dns sous linux
Configuration dns sous linuxBalamine Gassama
 

Tendances (18)

ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Atmosphere Framework
Atmosphere FrameworkAtmosphere Framework
Atmosphere Framework
 
Postgresql et psqlrc
Postgresql et psqlrcPostgresql et psqlrc
Postgresql et psqlrc
 
Load balancing
Load balancingLoad balancing
Load balancing
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
Tp docker-v21
Tp docker-v21Tp docker-v21
Tp docker-v21
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...
PyConFR 2015 : Utiliser salt pour tester son infrastructure sur open stack ou...
 
Pgbackrest meetup
Pgbackrest meetupPgbackrest meetup
Pgbackrest meetup
 
Installation Et Configuration De Nutch
Installation Et Configuration De NutchInstallation Et Configuration De Nutch
Installation Et Configuration De Nutch
 
Serveur lamp
Serveur lampServeur lamp
Serveur lamp
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debian
 
Installation et configuration d'apache tomcat
Installation et configuration d'apache tomcatInstallation et configuration d'apache tomcat
Installation et configuration d'apache tomcat
 
Mis en place d'un herbergement multiple sous centos 6.
Mis en place d'un herbergement multiple sous centos 6.Mis en place d'un herbergement multiple sous centos 6.
Mis en place d'un herbergement multiple sous centos 6.
 
Rapport tp openssl
Rapport  tp  opensslRapport  tp  openssl
Rapport tp openssl
 
Java Content Repository avec Jackrabbit
Java Content Repository avec JackrabbitJava Content Repository avec Jackrabbit
Java Content Repository avec Jackrabbit
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
Configuration dns sous linux
Configuration  dns sous linuxConfiguration  dns sous linux
Configuration dns sous linux
 

En vedette

Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSKokou Gaglo
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introVictor Pascual Ávila
 
Programmation evénementielle
Programmation evénementielleProgrammation evénementielle
Programmation evénementielleKokou Gaglo
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspectiveshwetank
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...Kokou Gaglo
 
Etude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeEtude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeHermann GBILIMAKO
 

En vedette (7)

Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMS
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC intro
 
Programmation evénementielle
Programmation evénementielleProgrammation evénementielle
Programmation evénementielle
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspective
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...
 
Etude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeEtude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS Sécurisée
 
Design pattern
Design patternDesign pattern
Design pattern
 

Similaire à Serveur http

ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllllajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllllElalami8
 
cours web developpement statique AJAX 2024
cours web developpement statique AJAX  2024cours web developpement statique AJAX  2024
cours web developpement statique AJAX 2024YounesOuladSayad1
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615JUG Toulouse
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancertarkaus
 
173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-socketsnaimanaima1
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
0554-programmation-web-ajax programmation web ajax
0554-programmation-web-ajax programmation web ajax0554-programmation-web-ajax programmation web ajax
0554-programmation-web-ajax programmation web ajaxMarouaneMyyara2
 
White paper: SSTIC 2008: Advanced CSRF
White paper: SSTIC 2008: Advanced CSRFWhite paper: SSTIC 2008: Advanced CSRF
White paper: SSTIC 2008: Advanced CSRFManfred Touron
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWinslo Nwan
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 

Similaire à Serveur http (20)

ajax.pdf
ajax.pdfajax.pdf
ajax.pdf
 
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllllajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
 
cours web developpement statique AJAX 2024
cours web developpement statique AJAX  2024cours web developpement statique AJAX  2024
cours web developpement statique AJAX 2024
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
 
Introduction à ajax
Introduction à ajaxIntroduction à ajax
Introduction à ajax
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-sockets
 
Le Réseau et Java
Le Réseau et JavaLe Réseau et Java
Le Réseau et Java
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
0554-programmation-web-ajax programmation web ajax
0554-programmation-web-ajax programmation web ajax0554-programmation-web-ajax programmation web ajax
0554-programmation-web-ajax programmation web ajax
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
White paper: SSTIC 2008: Advanced CSRF
White paper: SSTIC 2008: Advanced CSRFWhite paper: SSTIC 2008: Advanced CSRF
White paper: SSTIC 2008: Advanced CSRF
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 

Plus de Kokou Gaglo

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)Kokou Gaglo
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Kokou Gaglo
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsKokou Gaglo
 
MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.Kokou Gaglo
 

Plus de Kokou Gaglo (7)

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.
 

Serveur http

  • 2. 1. var http = require('http'); 2. var server = http.createServer(); 3. server.on('request', function(req, res) { 4. res.writeHead(200, {'Content-Type': 'text/plain'}); 5. res.write('Hello World!'); 6. res.end(); 7. }); 8. server.listen(4000); 2par James Gaglo
  • 3. Sur la ligne 1 vous obtenez le module http, à partir duquel vous pouvez créer un objet serveur en appelant http.createServer () (ligne 2). Vous pouvez alors écouter les événements request, qui se produisent quand un nouveau client se connecte. La fonction de rappel de l'événement fourni a deux arguments: les objets request et response. Vous pouvez alors utiliser l'objet request pour connaître les détails au sujet de cette requête et utiliser l'objet response pour répondre au client pour le client. 3par James Gaglo
  • 4. Lors de l'écoute d'événements request, la fonction de callback obtient un objet http.ServerRequest comme premier argument. Cet objet contient les attributs url ,method et headers que nous pouvons inspecter.  req.url: Cet attribut contient l'URL de la requête en tant que chaine de caractère. Exemple pour l'analyser: require('http').createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(req.url); }).listen(4000);  req.method: Il contient la méthode HTTP utilisée par la requête :GET, POST, DELETE, ou HEAD. 4par James Gaglo
  • 5.  req.headers: Celui-ci contient un objet avec une propriété pour chaque en-tête HTTP sur le demande. Pour l'analyser, vous pouvez exécuter le serveur: var util = require('util'); require('http').createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(util.inspect(req.headers)); }).listen(4000); util.inspect () est une fonction utilitaire qui analyse les propriétés de n'importe quel objet. 5par James Gaglo
  • 6. Quand vous obtenez l'événement request sur un serveur, vous n'obtenez pas immédiatement le corps de cette requette, tout simplement parce qu'il n'est pas encore arrivé. Mais si vous voulez, vous pouvez écouter les événements de donnéescar l'objet request est un ReadStream: 1. var writeStream = ... 2. require('http').createServer(function(req, res) { 3. req.on('data', function(data) { 4. writeStream.write(data); 5. }); 6. }).listen(4001); 6par James Gaglo
  • 7. L'objet response (le second argument de la fonction de rappel) est utilisée pour répondre au client. Avec elle, vous pouvez écrire les en-têtes et écrire le corps.  Ecrire le Header Pour écrire une en-tête, utilisez res.writeHead (statut,headers), où headers est un argument optionnel avec un objet contenant une propriété pour chaque en-tête que vous voulez envoyer. Prenons l'exemple suivant: 7par James Gaglo
  • 8. 1. require('http').createServer(function(req, res) { 2. res.writeHead(200, { 3. 'Content-Type': 'text/plain', 4. 'Cache-Control': 'max-age=3600' }); 5. res.end('Hello World!'); 6. }).listen(4000); $ curl -i http://localhost:4000 pour voir le résultat 8par James Gaglo
  • 9.  Modification ou Définition d'un Header 1. res.setHeader(name, value); Cela ne fonctionne que si vous n'avez pas déjà envoyé un morceau du corps en utilisant res.write () ou res.end (). Cela échoue également si vous avez déjà utilisé res.writeHead () sur cette l’objet response , parce que les en-têtes serait déjà été envoyé. 9par James Gaglo
  • 10.  Suppression d’un Header Vous pouvez supprimer un en-tête que vous avez déjà mis en appelant res.removeHeader et en fournissant le nom de l'en-tête: 1. res.removeHeader ('Cache-Control'); Encore une fois, cela ne fonctionne que si les en-têtes de la réponse n'ont pas déjà été envoyées. 10par James Gaglo
  • 11.  Rédaction du corps de la réponse Un serveur HTTP envoie le corps de réponse après l'envoi de l'en-tête de réponse. Deux façons de le faire : écrire une chaîne: 1. res.write ('Bonjour'); ou utiliser un tampon existant: 1. var tampon Buffer = new ('Bonjour le monde'); 2. res.write (buffer); 11par James Gaglo
  • 12.  Corps de réponse STREAMING HTTP Une des grandes caractéristiques de Node est la capacité de consommer et de produire des flux facilement à partir de différents sources. Parce que HTTP est un protocole principal dans Node, les réponses HTTP ne sont pas différentes. L'encodage chunked de HTTP permet à un serveur de continuer d'envoyer des données au client même si la taille du corps de réponse n'a pas été envoyé. A mons que vous ne spécifiez un en-tête Content-Length, le serveur Node HTTP envoie l'en-tête qui suit au client: Transfer-Encoding: chunked 12par James Gaglo
  • 13. Quelques exemples de streaming en utilisant cette fonction du serveur HTTP sont le piping de la sortie d'un fichier ou d'un autre processus 13par James Gaglo
  • 14.  Piping d’un fichier Vous pouvez diriger n'importe quel ReadStream dans la réponse. Voici un exemple qui redirige un fichier dans la réponse : 1. var fs = require('fs'); 2. require('http').createServer(function(req, res) { 3. res.writeHead(200, {'Content-Type': 'video/mp4'}); 4. var rs = fs.createReadStream('test.mp4'); 5. rs.pipe(res); 6. }).listen(4000); Si vous ouvrez http://127.0.0.1:4000 sur n'importe quel navigateur moderne, le film devrait commencer à jouer immédiatement, même si elle n'est pas complètement chargé. 14par James Gaglo
  • 15.  Piping de la sortie d’un autre processus 1. var spawn = require('child_process').spawn; 2. require('http').createServer(function(req, res) { 3. var child = spawn('tail', ['-f', '/var/log/system.log']); 4. child.stdout.pipe(res); 5. res.on('end', function() { 6. child.kill(); 7. }); 8. }).listen(4000); 15par James Gaglo
  • 16. Le chemin du fichier est fourni dans l’url comme ceci : http://localhost:4000/path/to/my/file.txt 1. var path = require('path'), 2. fs = require('fs'); 3. 4. require('http').createServer(function(req, res) { 5. var file = path.normalize('.' + req.url); 6. console.log('Trying to serve', file); 7. function reportError(err) { 8. console.log(err); 9. res.writeHead(500); 10. res.end('Internal Server Error'); 11. } 16par James Gaglo
  • 17. 12. path.exists(file, function(exists) { 13. if (exists) { 14. fs.stat(file, function(err, stat) { 15. var rs; 16. if (err) { 17. return reportError(err); 18. } 19. if (stat.isDirectory()) { 20. res.writeHead(403); res.end('Forbidden'); 21. } else { 22. rs = fs.createReadStream(file); 23. rs.on('error', reportError); 24. res.writeHead(200); 17par James Gaglo
  • 18. 25. rs.pipe(res); 26. } 27. }); 28. } else{ 29. res.writeHead(404); 30. res.end('Not found'); 31. } 32. }); 33. }).listen(4000); 18par James Gaglo
  • 19. Dans cet exemple, nous allons créer un serveur HTTP qui affiche du texte avec 100 sauts de ligne par seconde 1. require('http').createServer(function(req, res) { 2. res.writeHead(200, {'Content-Type': 'text/plain'}); 3. var left = 10; 4. var interval = setInterval(function() { 5. for(var i = 0; i< 100; i++) { 6. res.write(Date.now() + " "); 7. } 8. if (-- left === 0) { 9. clearInterval(interval); 10. res.end(); 11. } 12. }, 1000); 13. }).listen(4000); 19par James Gaglo
  • 20.  Professional Nodejs de Pedro Teixeira  docs.nodejitsu.com  http://nodejs.org/api/ 20par James Gaglo