express use 实现this
每次都返回,因此总是可链接的。可链接性问题来自您对 的不必要使用,当您通过、等server.use(server.router)
添加第一个非中间件路由时,express 会自动为您完成。这可以在此处的 express 源代码中看到,尽管这是一个共同点混乱和问题(其中大部分来自于做而不是让路由器默认去它去的地方,这几乎总是它的正确位置。所以这里是论坛:server.get
server.post
server.user(server.router)
- 正确排序
server.use
调用以设置您的中间件
- 您的特定路由
server.get('/home')
以及其他 HTTP 方法功能
- 任何错误处理、404 中间件等
Express 会在 1 之后、2 之前添加路由器,一切都会好起来的。
在您声明的评论中,如果您省略该server.router
行,您将无法访问req.session
. 对不起,但事实并非如此。req.session
这是一个完整的工作快速应用程序,它在会话中间件未定义之前显示一个中间件,在会话中间件存在之后立即显示另一个中间件。
var express = require('express');
var server = express();
server.use(function (q,r,n) {console.log('Before cookie:', q.session);n();});
server.use(express.cookieParser());
server.use(function (q,r,n) {console.log('after cookie:', q.session);n();});
server.use(express.session({secret: 'SEKRET'}));
server.use(function (q,r,n) {console.log('after session:', q.session);n();});
server.get('/', function (q,r,n) {r.send("you got slashed");});
server.listen(3000);
运行它,你会在控制台上看到它。
Before cookie: undefined
after cookie: undefined
after session: { cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }
但是,如果您问为什么不能在server
定义变量的同一语句中将变量用作函数参数,那正是 JavaScript 的工作原理,与 express 的关系为零。你不能这样做:
var foo = console.log(foo.bar);
因为foo
在整个语句完成之前是未定义的。
FWIW 我认为像这样的可链接代码是可疑的。它对调试器和断点不友好,不支持作为一流的语言功能,并且与每行未缩进和相比并没有真正为您节省任何字符app.use(app.router)
,但就这样吧。