app.use(app.router);究竟是什么意思
发布于 10 年前 作者 ceclinux 14614 次浏览 最后一次编辑是 8 年前

网上这一些答案看的不是很懂

今天在用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 的定义了…为什么要放在前面?? 因为程序是自上而下的运行啊…

回到顶部