Порядок приоритетности маршрутизатора в 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". Пожалуйста, дайте мне понять, как выражается и что является преимуществом.

Ответы

Ответ 1

Сначала заказ сначала подаётся.

В вашем случае, если пользователь попадает /api, он получит ответ от api, но если вы напишете /:name маршрута до /api, /: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'
    });
});

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