请教Express中应用级路由和Route中间件的路由的区别
发布于 4 年前 作者 echoloyuk 10481 次浏览 最后一次编辑是 3 年前 来自 问答

各位朋友,最近才学习Express,在自己实践的时候遇到了一个问题。在官网上介绍了最基本的路由方式,示例使用的是应用级路由,我按照示例写,例如:

app.use('/', function (req, res){
	res.send('helloworld');
})

这样,在访问首页时,会显示HelloWorld。但是,我使用express-generator生成的express项目中,使用的是Route中间件作为路由的。它是这样写的:

var routes = require('./routes/index');
app.use('/', routes);

而routes模块上写的是:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
module.exports = router;

我有点困惑,这两种方式的路由到底有什么区别?我知道,使用express.Router()做的路由会比app.use('', function)这样的应用级路由要早,它会优先于所有应用级路由执行。具体的原理大神们能指点一二吗?

为什么使用app.use('/', function)的方式会在http://127.0.0.1:3000/login的请求时仍然会响应,而使用Route作为路由时,显示的是404呢?

9 回复

app.use(’/’, function) 指的链接是http://127.0.0.1:3000 如果要进login这样配app.use(’/login’, function) 试下

@daileimail 多谢这位朋友~我貌似明白啦。

另外,如果是:

var route = express.Router();
route.get('/', function (){
	//....
});
app.use('/login', route);

貌似也可以啊,不知道这两个有什么区别。请教一下

use(path, fn)添加的是middleware
只要请求的路径以path开头,就会进去路由
METHOD(path,fn)添加的是route
当请求的路径匹配path才会交给它handle

router.get 限制了只能使用 get 方法。用 use 的话,需要自己去判断用户使用的是什么方法。其他没有什么区别了吧

@alsotang soga,非常感谢,我想理解上差不多啦~

@William17 哦~多谢啦~,明白了

express的路由模块可以理解成一个类似于express-session的中间件 app.use添加的是一个中间件

@liuxuech 哦,明白了,一般的情况下,不知道大家用的哪个方式做的路由呢?是不是使用路由模块更合理啊?

回到顶部