app.use(app.router);究竟是什么意思
网上这一些答案看的不是很懂
今天在用express-flash的时候
app.use(express.cookieParser('shopmall'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
必须要放在app.use(app.router);的前面,不然的话会报错说没有req.flash这个方法
2 回复
app.router的用途这里讲的很详细了。
简单理解:里边会创建一个路由map,把类似app.get、app.post等的所有路由的url和callback做一个映射保存,当req.url命中路由时执行相应的回调。如果不显式调用app.use(app.router);
则会在第一条路由里边隐式调用。
这里边,调用app.use(app.router);
时会暂存req对象,当后面再定义路由时,
app.get('/foo', function(req, res, next) {});
这里的req应该用的是之前保存下来的,所以会出现没有req.flash的错误(没细看express源码,这是猜测的~)。
express 的中间件写法.
完整而言是
app.use(function (req, res, next){
//为了我们能够使用 req.flash
req.flash = req.flash || {};
next();
});
然后,接下来我就可以获取req.flash 的定义了…为什么要放在前面?? 因为程序是自上而下的运行啊…