NodeJS - Express 4.0下使用app.dynamicHelpers错误
2024-10-18 20:52:56
在NodeJS - Express 4.0下使用app.dynamicHelpers发生错误:
app.dynamicHelpers({
^
TypeError: Object function (req, res, next) {
app.handle(req, res, next);
} has no method 'dynamicHelpers'
查阅资料发现新版本的Express已经不支持dynamicHelpers方法了。可以用locals来替代。
原来代码如下:
app.dynamicHelpers({
user: function(req, res) {
return req.session.user;
},
error: function(req, res) {
var err = req.flash('error'); if (err.length)
return err;
else
return null;
},
success: function(req, res) {
var succ = req.flash('success');
if (succ.length)
return succ;
else
return null;
}
});
用locals方式替换为:
app.use(function(req,res,next){
res.locals.user=req.session.user;
var err = req.flash('error');
var success = req.flash('success');
res.locals.error = err.length ? err : null;
res.locals.success = success.length ? success : null; next();
});
以上代码一定要放在指定路由的语句之前,不然页面中访问user、error、success变量会出错,提示:user is not defined。
注意:
req.flash 是 Express 提供的一个奇妙的工具,通过它保存的变量只会在用户当前
和下一次的请求中被访问,之后会被清除,通过它我们可以很方便地实现页面的通知
和错误信息显示功能。
所以如上代码如果修改成下面的写法,就无法在页面中正确显示出error和success的值。
app.use(function(req,res,next){
res.locals.user=req.session.user; res.locals.error = req.flash('error').length ? req.flash('error') : null;
res.locals.success = req.flash('success').length ? req.flash('success') : null; next();
});
即是req.flash的值会在第一次访问之后会被清除。
最新文章
- 说说Makefile那些事儿
- 未能加载文件或程序集“Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5”或它的某一个依赖项。系统找不到指定的文件。
- vb6保存项目到c盘的安装目录
- 【BZOJ 4269】再见Xor
- div 加滚动条
- jQuery跨域
- jquery 插件原则
- GP的使用心得
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
- UOJ 217 奇怪的线段树
- Linux samba服务器设置简单匿名共享
- python的编码问题研究------使用scrapy体验
- LCT总结(LCT,Splay)
- jQueryh插件imgareaselect
- Spring MVC工作原理 及注解说明
- 微信video最上层解决问题
- nodejs创建文件
- 洛谷P3952 时间复杂度
- php框架:Flight 简介
- ConcurrentHashMap源码解析(1)