express.js中的路由器优先级顺序 [英] Order of router precedence in express.js

查看:1123
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆