express.js中的路由器优先顺序
我想了解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' }); });
如果请求来自客户端localhost:3000 / api / abc和localhost:3000 / user / abc,则来自api和用户模块的响应。 但是,如果我提出像localhost:3000 / myName / xyz这样的请求,应用程序模块将返回一个响应。 这种行为让我担心expressjs的优先级是什么,路由器模块的正确顺序是什么。 为什么路由器不要在“api”,“users”和参数“:name”之间混淆。 请让我明白如何expression,什么是优先。
订单是先到先得。
在你的情况下,如果用户点击/ api,他将得到api的响应,但是如果你在/api
之前写入/:name
route,那么/:name
也将用于/api
请求。
Case1:
/api
将为/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' }); });
情况2:
/:name
服务于/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' }); });