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
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
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