express 的 app.get() 怎样理解?
发布于 13 年前 作者 jiyinyiyong 25026 次预览 最后一次回复是 13 年前 来自
表示对所谓 Web 框架只停留在写一下 app.get() 那种水平…
帖子写一半想起去看源码… 怎么偏偏找不到 app.get = 的具体代码
https://github.com/visionmedia/express/blob/master/lib/application.js
首先在前边看到获取变量的解释:
Get setting name value
app.get('title');
而后面又是我更熟悉的处理 GET 请求的用法…
app.get('/', function(req, res){
res.send('hello world');
});
这是为什么?
还有 app.params() app.use() app.engine() 我还好理解,
可前边的 app.set() 设置那么多变量那是做什么用的?
10 回复
若调用
app.get()时只有一个参数,则认为是取设置值,否则认为是注册路由@leizongmin 可恶的
arguments变量… 不敏感 那再请问下app.use()的路由是怎样作用上去的, 我看app.use()被用了很多次, 而且404之类也通过它实现的… 疑问主要是app.get()跟app.use()之前是什么关系啊?终于有点懂了, 所有被
app.use()接收的handle会被放到一个stack里边app.get()执行的时候会把一条路由规则添加到stack里… 然后顺序检索statck直到结束, 那么执行这段代码给出404https://github.com/senchalabs/connect/blob/master/lib/proto.js#L122不过这样的话, 自己定义
404页面是怎样做到的 https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js#L45@jiyinyiyong app.get()这个功能是由一个叫
router的中间件来处理的 默认创建的代码中有这一行,就是使用这个路由中间件:app.router的定义在这里:https://github.com/visionmedia/express/blob/master/lib/application.js#L70
router.middleware的代码:https://github.com/visionmedia/express/blob/master/lib/router/index.js#L32
这个
_dispatch方法就是查找是否有注册匹配的路由,如果有则调用相应的函数,否则直接调用next()进入下一个中间件。@leizongmin 好多代码看得乱了… 这么说所有的
GET POST都是在同一个middleware里的? 那还有比如404这种特殊的路由怎样处理的呢?@jiyinyiyong
app.get('/ooxx', function () {});不是注册中间件,而是对中间件app.router进行配置(包括app.post(),app.all()等),虽然其工作机制跟middleware差不多,但不要混淆。@leizongmin 我绕得有点晕了… 我想理一下, 比方说我写了
app.use(..);app.get(...);, 两行代码, 那么 Express 内部的查询过程是怎么样的呢?我现在能理解是先去找中间件, 中间件可能一般通过
next()跳出, 跳出之后继续找中间件, 这时遇到作为中间件传的app.get()生成的路由… 那这个是不是错了?.. 两者顺序怎么样, 如果遍历中间件找不到是不是调用connect的404操作了?真的理解错了… 谢谢指导, 现在明白过来了 原来
app.router是单独的一个和middleware平级的对象 http://nodejs.iteye.com/blog/1594920@jiyinyiyong

