Latest web development tutorials

percorso Node.js

Vogliamo fornire l'instradamento richiesta URL e altri GET e POST parametri richiesti, allora questi necessità di indirizzare i dati per eseguire il codice corrispondente.

Pertanto, abbiamo bisogno di vedere la richiesta HTTP, estrarre l'URL e GET / POST richiesta parametro. Questa funzione dovrebbe essere parte del percorso o il server (o anche in funzione del modulo stesso) è davvero la pena di esplorare, ma qui è indicativamente prevista per il nostro server HTTP.

Tutti i dati che ci servono sono incluse nel l'oggetto della richiesta, viene passato l'oggetto come onRequest () primo argomento alla funzione di callback. Ma al fine di risolvere questi dati, abbiamo bisogno di moduli aggiuntivi Node.js, che sono URL e modulo querystring.

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

Naturalmente, possiamo anche usare il modulo querystring per analizzare il corpo dei parametri di richiesta POST, dimostreremo più avanti.

Ora veniamo al onRequest () per aggiungere un po 'di logica per trovare le richieste del browser sentiero 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;

Bene, la nostra applicazione può ora percorso URL richiesto di distinguere tra le diverse richieste - che ci ha permesso di utilizzare il percorso (non ancora completato) per la richiesta al sentiero URL è mappato al gestore di riferimento.

Vogliamo costruire applicazioni, il che significa che una richiesta del / inizio e / upload può utilizzare codice diverso da gestire. Più avanti vedremo come integrare questi elementi insieme.

Ora possiamo scrivere il percorso, e creare un file denominato router.js, aggiungere il seguente:

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

exports.route = route;

Come si può vedere, questo codice non ha fatto nulla, ma per ora dovrebbe essere. Aggiungere più logica in passato, diamo un'occhiata a come integrare il routing e server.

Dobbiamo essere consapevoli che c'è un server di routing e di utilizzare in modo efficace. Naturalmente, possiamo essere hard-coded in questo modo è destinata a una dipendenza sul server, ma l'esperienza di altri linguaggi di programmazione ci ha detto che sarebbe stata una cosa molto dolorosa, quindi dovremo usare l'iniezione di dipendenza Aggiungere percorso relativamente liberamente modulo.

In primo luogo, cerchiamo di espandere la funzione di avvio del server (), in modo che la funzione di routing come un argomento in passato, server.js codice del file è il seguente

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;

Allo stesso tempo, amplieremo conseguenza index.js, quindi funzione di routing può essere iniettato nel server:

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

server.start(router.route);

Qui, si passa la funzione non ha ancora fatto nulla.

Se ora si avvia l'applicazione (index.js nodo, ricordate sempre la riga di comando), e quindi richiede un URL, si vedrà l'applicazione corrispondente alle informazioni di uscita, il che indica che il nostro server HTTP sta già utilizzando un modulo di routing, e richiederà il percorso viene passato al percorso:

$ node index.js
Server has started.

Uscita è stato rimosso sulla parte relativa alla richiesta di /favicon.ico più fastidioso.

Accesso Browser http://127.0.0.1:8888/, risultati di output sono i seguenti: