CNode

app.use(app.router);究竟是什么意思

Cceclinux发布于12 年前最后回复12 年前2 回复15507 浏览0 收藏

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

今天在用express-flash的时候

app.use(express.cookieParser('shopmall'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());

必须要放在app.use(app.router);的前面,不然的话会报错说没有req.flash这个方法

查看回复

回复 (2)

C
chemdemo#1·12 年前

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源码,这是猜测的~)。

Y
youxiachai#2·12 年前

express 的中间件写法.

完整而言是

app.use(function (req, res, next){
   //为了我们能够使用 req.flash

   req.flash = req.flash || {};
   next();
});

然后,接下来我就可以获取req.flash 的定义了..为什么要放在前面?? 因为程序是自上而下的运行啊..

参与回复
登录后即可参与回复。登录