2015-09-16 32 views
13

Tôi muốn hiểu thứ tự ưu tiên trong express.js. Ví dụ, như mã dưới đâyThứ tự ưu tiên bộ định tuyến trong 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' 
    }); 
}); 

Nếu một yêu cầu đến từ localhost khách hàng: 3000/api/abc và localhost: 3000/user/abc, phản ứng từ api và sử dụng mô-đun. Nhưng nếu tôi thực hiện một yêu cầu như localhost: 3000/myName/xyz, mô-đun ứng dụng sẽ trả về một phản hồi. Hành vi này cho phép tôi quan tâm về ưu tiên của expressjs là gì và thứ tự đúng cho các mô-đun router. Tại sao bộ định tuyến không gây nhầm lẫn giữa các hành động "api", "người dùng" và thông số ": tên". Xin vui lòng cho tôi hiểu rõ ràng làm thế nào thể hiện và những gì là ưu tiên.

Trả lời

10

Đơn đặt hàng trước tiên được phân phát trước. Trong trường hợp của bạn, nếu người dùng truy cập/api, anh ta sẽ nhận được phản hồi từ api, nhưng nếu bạn viết /:name tuyến đường trước /api, /:name cũng sẽ đáp ứng yêu cầu /api.

Trường hợp1: /api sẽ phân phối các yêu cầu cho /api.

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

Trường hợp2: /:name phục vụ yêu cầu /api/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

Thank quá nhiều @Laxmikant Dange nhưng nếu tôi không làm gì cả trong mô-đun api hoặc người sử dụng mô-đun, tại sao app.use ("/", func() {}) hoạt động như máy chủ ...?. Nó phản hồi MainPage .. ?? – hoanganh17b

+2

Trong tài liệu ExpressJS, tôi có thể tìm thông tin về quy tắc ưu tiên sử dụng() và nhận() các tuyến đường. –

+1

@hoan vì không có ': name' nên nó không khớp với' /: name' –

Các vấn đề liên quan