各位朋友,最近才学习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呢?
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 哦,明白了,一般的情况下,不知道大家用的哪个方式做的路由呢?是不是使用路由模块更合理啊?