Latest web development tutorials

itinéraire Node.js

Nous voulons fournir le routage de demande d'URL et d'autres paramètres GET et POST requis, puis ceux-ci besoin d'acheminer les données pour effectuer le code correspondant.

Par conséquent, nous avons besoin de voir la requête HTTP, extraire l'URL et GET / POST demande de paramètre. Cette fonction devrait faire partie de la route ou le serveur (ou même en fonction du module lui-même) est vraiment la peine d'explorer, mais ici, il est provisoirement prévue pour notre serveur HTTP.

Toutes les données dont nous avons besoin sont inclus dans l'objet de requête, l'objet comme onRequest () premier argument de la fonction de rappel est passé. Mais pour résoudre ces données, nous avons besoin de modules de Node.js supplémentaires, qui sont url et module querystring.

                   url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

Bien sûr, nous pouvons également utiliser le module querystring pour analyser le corps des paramètres POST demande, nous démontrerons plus tard.

Nous arrivons maintenant à onRequest () pour ajouter un peu de logique pour trouver les requêtes du navigateur de chemin d'URL:

var http = require("http");
var url = require("url");

function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

Eh bien, notre application peut maintenant chemin d'URL demandé de faire la distinction entre les différentes demandes - qui nous a permis d'utiliser la route (pas encore terminé) à la demande de la route URL est mappé sur le gestionnaire de référence.

Nous voulons construire des applications, ce qui signifie que la demande du / de départ et / upload peut utiliser un code différent à manipuler. Nous verrons plus loin comment intégrer ces éléments.

Maintenant , nous pouvons écrire la route, et de créer un fichier nommé router.js, ajouter ce qui suit:

function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;

Comme vous pouvez le voir, ce code ne fait rien, mais pour l'instant il devrait être. Ajouter plus de logique dans le passé, regardons la façon d'intégrer le routage et les serveurs.

Nous devons être conscients qu'il ya un serveur de routage et de les utiliser efficacement. Bien sûr, nous pouvons être codé en dur de cette manière est lié à une dépendance sur le serveur, mais l'expérience d'autres langages de programmation nous ont dit que ce serait une chose très douloureuse, donc nous allons utiliser l'injection de dépendance Ajouter itinéraire relativement lâche module.

Tout d' abord, nous allons étendre la fonction démarrage du serveur (), de sorte que la fonction de routage comme un argument dans le passé, server.js code du fichier est la suivante

var http = require("http");
var url = require("url");

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

Dans le même temps, nous allons étendre en conséquence index.js, donc la fonction de routage peut être injecté dans le serveur:

var server = require("./server");
var router = require("./router");

server.start(router.route);

Ici, nous passons la fonction n'a pas encore fait quoi que ce soit.

Si vous commencez maintenant l'application (index.js de noeud, rappelez-vous toujours la ligne de commande), puis demandez une URL, vous verrez l'application correspondant à l'information de sortie, ce qui indique que notre serveur HTTP utilise déjà un module de calcul d'itinéraire, et vous demander le chemin d'accès est transmise à la route:

$ node index.js
Server has started.

La production a été retirée au cours de la partie pertinente de la demande de /favicon.ico plus ennuyeux.

Navigateur accès http://127.0.0.1:8888/, les résultats de sortie sont les suivantes: