Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js express.js中的路由器优先级顺序_Node.js_Express - Fatal编程技术网

Node.js express.js中的路由器优先级顺序

Node.js express.js中的路由器优先级顺序,node.js,express,Node.js,Express,我想了解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) {

我想了解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”、“用户”和参数“名称”。请让我清楚地了解express的功能和优先顺序。

顺序是先到先得

在您的情况下,如果用户点击/api,他将从api获得响应,但如果您在
/api
之前编写
/:name
路由,
/:name
也将用于
/api
请求

案例1:
/api
将为
/api
的请求提供服务

案例2:
/:name
/api
/users

中给出的示例非常简单,不幸的是很难找到。我只是找到了它

中间件功能是按顺序执行的,因此中间件包含的顺序很重要


非常感谢@Laxmikant Dange,但如果我在api模块或用户模块中什么都不做,为什么app.use(“/”,func(){})充当服务器。。。?。它响应主页..?在ExpressJS文档中,我可以在哪里找到有关use()和get()路由的优先规则的信息。@hoan,因为没有
:name
,所以它不匹配
/:name
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'
    });
});
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'
    });
});
app.use(function(req, res, next) {
    res.send('This is the only thing that ever happens')
}
app.use(...) // never used
app.get(...) // never used
app.put(...) // never used
app.post(...) // never used