2016-07-11 6 views
-1

Ich habe eine benutzerdefinierte Mini-Router implementieren und haben sich an Express-Js für Inspirationen.benutzerdefinierte Mini-Router in node.js

Kann mir jemand auf express js führt erstellt Route Handler unter der Haube.

Zum Beispiel, wie das Folgende implementiert werden kann?

Knoten Servercode

http.createServer(function (req, res) { //how routing is done after? 
    //req??? 
    req.get("/customers", function(){}) 
    req.get("/customers/:id", function(){}) 
}).listen(9615); 

ist Express.js mit regulären Ausdrücken? Bitte zeigen Sie auch auf das richtige Skript im Github-Repository.

+2

Express verwendet ['path-to-regexp'] (https://www.npmjs.com/package/path-to-regexp), um Pfade in reguläre Ausdrücke umzuwandeln. – robertklep

+0

danke @robertklep, es ist großartig, das ist sehr nahe, ich habe jetzt keine regulären Ausdrücke zu viel, aber können Sie mir ein Beispiel als Antwort schreiben, um über zwei Routen mit regulären Ausdrücken zu behandeln. – user2727195

+0

@robertklep Ich habe die Regex auch von ihrer GitHub-Seite gefunden, siehe http://forbeslindesay.github.io/express-route-tester/ – user2727195

Antwort

1

Kudos zu robertklep.

Unter der Haube verwendet express js path-to-regexp.

Ich fand auch den regulären Ausdruck von ihrer Seite, die durch Express.js verwendet wird, um die URL link

/^(?:\/(?=$))?$/i 

Es gibt nicht viel neu zu erfinden das Rad hier beteiligt zu analysieren, wenn alles, was ich eine grundlegende Router wollte ohne den gesamten Rahmen und alle Abhängigkeiten in meinem Projekt zu bekommen.

1

Sie müssen dies überprüfen https://github.com/expressjs/express/blob/master/lib/router/index.js. Dies ist ein separates Express-Modul zum Routen und Sie können es für Ihren persönlichen Gebrauch herausreißen, ohne das Rad neu zu erfinden.

[EDIT] - Um eine Idee zu geben, wie es gemacht werden könnte.

var routes = []; 
var app = {}; 
app.get = function(pattern, cb) { 
    var splits = pattern.split("/"); 
    var route = ""; 
    var regex = ""; 
    for(i=0; i < splits.length; i++) { 
     if (splits[i].indexOf(':') === -1) { 
      route += splits[i]+"/"; 
     } else { 
      regex = splits[i].replace(":", ""); 
     } 
    } 
    routes.push({ route : routes, regex : regex, cb: cb }); 
} 

app.get("/customers", callback); 

. 
. 
. 
// handle incoming request. requestPath comes from server 
var requestPath = "/customers"; // example only. 

app.handleRequest(requestPath) { 
    for(i = 0; i < routes.length; i++) { 
     if(routes[i].route === requestPath) { 
      cb = routes[i].cb; 
     } 
    } 
    cb(); 
} 
+0

Ich fürchte, dass ich das Rad neu erfinden und wirklich verstehen muss, was unter der Haube vorgeht, auf der Suche nach einer Code-Lösung für meine Frage – user2727195

+0

Aber warum? IMHO, verwenden Sie einfach die Funktion in index.js, die den Express-Rahmen leitet. Ein einfacher Router ist nicht schwierig, aber das Hinzufügen von Features wäre ein Problem. – kawadhiya21

+0

stimmt, deshalb suche ich nach sehr einfachen Implementierungen mit meinen Routen, wie haben sie das gemacht? – user2727195

0

Bitte nehmen Sie sich einen Blick auf the Express JS documentation. Es wäre so ziemlich alles. Zum Beispiel Express JS ein Stück Code verwendet:

// GET method route 
app.get('/', function (req, res) { 
    res.send('GET request to the homepage'); 
}); 

// POST method route 
app.post('/', function (req, res) { 
    res.send('POST request to the homepage'); 
}); 

Wie für reguläre Ausdrücke, ja, können Sie sie verwenden. Zum Beispiel:

app.get('/ab(cd)?e', function(req, res) { 
    res.send('ab(cd)?e'); 
}); 

Abgesehen davon, nehmen Sie bitte the Express JS GitHub repository an einem Beispiel.

Wie für die Router-Implementierung in Express JS, siehe their GitHub code (router script).

+0

Nein, ich meine, wie man einen Quellcode eines Routers zu schreiben, Express js Router nicht implementieren – user2727195

+0

Am Ende der Antwort habe ich einen Link zu der Express JS Router-Implementierung für Ihre Inspiration, wenn Sie wirklich Code haben deine eigene Lösung. –

+0

Ich kann nicht wirklich von ihrem Github Repo verstehen, wenn Sie mir bitte sagen können, wie sie meine zwei Router verwendet haben – user2727195