关于express路由的一些疑问
//users.js
var express = require('express');
var router = express.Router();
//路由定义
router.get('/article', function(req, res) {
res.render('index', {titile: 'express'});
};
//模块导出
module.exports = router;
//app.js
var user = require(./routes/users');
app.use('/users', user);
请问express是如何做到路由匹配的,在看express源码时候看到routes是个handle(req, res, next)方法,_route->stack->layer, 而get等方法是_route->stack->layer->route->stack->layer,
第一个问题是想问调用好中间件方法之后/article,是如何做到匹配的?第二个问题是因为listen监听的是app()里面的handle函数,如何做到路由的实时监听,比如网页上写了一个地址,如何触发的,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
express为了做到灵活、代码精简,内部的代码进行了大量的抽象+复用,尤其是在路由这块。楼主看了心生疑惑是正常的,这块的代码的确挺糟糕的。
楼主的问题足够写一篇很长的文章,编写回答将近半个小时候我觉得放弃有条理的回答,直奔主题。
我们看下下面代码发生了什么
在内部,往 stack 里又push了 Layer 实例。
为什么楼主会觉得疑惑
前面说了,express这块的代码本身挺糟糕的,比如存在如下用法,并且内部都是往 router.stack 里新增一个 Layer实例
那么,如何区分是子路由,还是实际的路由
如何匹配的
比如楼主访问了 /user/articles,那么express内部(跳过一些琐碎的分支判断)
express为了做到灵活、代码精简,内部的代码进行了大量的抽象+复用,尤其是在路由这块。楼主看了心生疑惑是正常的,这块的代码的确挺糟糕的。
楼主的问题足够写一篇很长的文章,编写回答将近半个小时候我觉得放弃有条理的回答,直奔主题。
我们看下下面代码发生了什么
在内部,往 stack 里又push了 Layer 实例。
为什么楼主会觉得疑惑
前面说了,express这块的代码本身挺糟糕的,比如存在如下用法,并且内部都是往 router.stack 里新增一个 Layer实例
那么,如何区分是子路由,还是实际的路由
如何匹配的
比如楼主访问了 /user/articles,那么express内部(跳过一些琐碎的分支判断)