2015-09-16 16 views
13

Siparişin önceliğini ifade.js'de anlamak isterim. Örneğin, feryat kod bir istek istemci localhost'tan geliyorsaExpress.js'nin yönlendirici önceliği sırası

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' 
    }); 
}); 

olarak: 3000/API/abc ve localhost: 3000/user/abc, API ve kullanıcı modülünden yanıt. Ancak, localhost: 3000/myName/xyz gibi bir istek yaparsam uygulama modülü yanıt verir. Bu davranış, expressJs'in önceliği ve yönlendirici modülleri için doğru sırada neyin önemli olduğu konusunda beni endişelendiriyor. Yönlendiriciler neden "api", "kullanıcılar" ve ": name" parametreleri arasında karıştırmazlar. Lütfen nasıl ifade ettiğini ve neyin öncelikli olduğunu net bir şekilde anlatayım.

cevap

10

Sipariş ilk önce gelir. kullanıcı/API vurursa Senin durumunda

, o api gelen yanıt alacak, ancak /api önce /:name rotayı yazarsanız, /:name da /api istekleri için hizmet edecektir.

Durum 1

: /api/api için istekleri hizmet edecektir.

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' 
    }); 
}); 

Durum 2: /:name/api ve /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

Teşekkür çok fazla @Laxmikant Dange isteklerine hizmet verir ama api modülü veya kullanıcılar modüllerde hiçbir şey, neden app.use ("/", func() {}) sunucu olarak çalışır ...?. Bu MainPage yanıtlar .. ?? – hoanganh17b

+2

ExpressJS belgelerinde, use() ve get() yollarının öncelik kuralları hakkında bilgi bulabilirim. –

+1

@hoan çünkü ': name' yoktur, bu yüzden /: name' ile eşleşmiyor –