2015-09-16 3 views
13

Ich möchte die Reihenfolge Vorrang in express.js verstehen. Zum Beispiel, wie unten CodeReihenfolge der Router-Priorität in express.js

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 


app.use('/api', api); 
app.use('/users', users); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 

Wenn eine Anfrage vom Client localhost kommen: 3000/api/abc und localhost: 3000/user/abc, die Antwort von api und Anwendermodul. Aber wenn ich eine Anfrage wie localhost: 3000/myName/xyz mache, gibt das App-Modul eine Antwort zurück. Dieses Verhalten lässt mich über den Vorrang von Expressjs und die richtige Reihenfolge von Routermodulen nachdenken. Warum Router nicht verwechseln zwischen den Aktionen "api", "users" und Parameter ": name". Bitte lassen Sie mich klar verstehen, wie ausdrücklich und was Vorrang hat.

Antwort

10

Die Bestellung wird zuerst kommen zuerst dienen.

In Ihrem Fall, falls der Benutzer/api, wird er Antwort von api bekommen, aber wenn Sie /:name Route vor /api schreiben, /:name auch für /api Anfragen dienen.

Case1: /api für /api Anfragen dienen.

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 


app.use('/api', api); 
app.use('/users', users); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 

Case2: /:name dient Anfragen für /api und /users

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/api', api); 
app.use('/users', users); 



app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 
+1

Dank zu viel @Laxmikant Dange aber wenn ich nichts tun, in api Modul oder Benutzer-Module, warum Die App.use ("/", func() {}) fungiert als Server ...?. Es antwortet die MainPage .. ?? – hoanganh17b

+2

Wo finde ich in der ExpressJS-Dokumentation Informationen über die Vorrangregeln von use() - und get() - Routen. –

+1

@hoan, weil es kein ': name' gibt, also stimmt es nicht mit' /: name' überein –