Ran*_*lue 1 javascript node.js express
这是我的Express配置代码:
var server = express()
.use(express.cookieParser())
.use(express.session({secret: buffer.toString('hex')}))
.use(express.bodyParser())
.use(express.static('./../'));
server.use(server.router);
Run Code Online (Sandbox Code Playgroud)
令人讨厌的是,最后一个.use并没有像其他人那样被束缚.
如何完全连接Express中间件定义?
快速使用实现this每次都返回,因此总是可链接的.该chainability问题来自于你的不必要的使用server.use(server.router),这是为您快递时,你的第一个非中间件途径是通过增加自动完成server.get,server.post等等.这可以在这里明确的源代码中可以看出,尽管这是一个公共点混淆和问题(大多数都来自server.user(server.router)于完全相反,而不是让路由器默认运行到哪里,这几乎总是正确的位置.所以这里是论坛:
server.use调用以设置中间件server.get('/home')和其他HTTP方法功能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);
Run Code Online (Sandbox Code Playgroud)
运行它,你在控制台上看到这一点.
Before cookie: undefined
after cookie: undefined
after session: { cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }
Run Code Online (Sandbox Code Playgroud)
但是,如果您问为什么不能将server变量用作定义它的同一语句中的函数参数,那就是JavaScript的工作方式,并且与express无关.你不能这样做:
var foo = console.log(foo.bar);
Run Code Online (Sandbox Code Playgroud)
因为foo在整个语句完成之前是未定义的.
FWIW我认为这样的可链接代码是可疑的.它对调试器和断点不友好,不支持作为一流语言功能,并且与每行未缩进相比,并没有真正保存任何字符app.use(app.router),但也是如此.
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |