express.js中的路由器优先级顺序 [英] Order of router precedence in express.js
问题描述
我想了解express.js中的顺序优先级。例如,如下代码
I would like to understand the order precedence in express.js. For example, as bellow code
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之间混淆。请让我明白清楚表达方式和优先级。
If a request come from client localhost:3000/api/abc and localhost:3000/user/abc, the response from api and user module. But if I make a request like localhost:3000/myName/xyz, the app module return a response. This behavior let me concern about what is precedence of expressjs and what is correct order for router modules. Why routers do not confuse between actions "api", "users" and parameter ":name". Please let me understand clearly how express does and what is precedence.
推荐答案
订单先到先得。
在你的情况下,如果用户命中/ api,他将从api获得响应。但是如果在 / api
之前写入 /:name
route, /:name
将用于 / api
请求。
In your case, if user hits /api, he will get response from api. But if you write /:name
route before /api
, /:name
will serve for /api
requests also.
案例1:
/ api
将提供/ api
的请求。
Case1:
/api
will serve requests for/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'
});
});
Case2:
/:name
请求/ api
和/ users
Case2:
/:name
serves requests for/api
and/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'
});
});
这篇关于express.js中的路由器优先级顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!