• NodeJS


    在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的值会在第一次访问之后会被清除。

  • 相关阅读:
    1214. 波动数列(负数取余公式)
    1212. 地宫取宝
    AcWing 895. 最长上升子序列
    01背包问题
    99. 激光炸弹
    AcWing 1230. K倍区间
    【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
    【nginx】root alias 区别,以及server root , location root 区别
    【js】【跨域问题】前后端分离的跨域问题
    【js】【读书笔记】廖雪峰的js教程读书笔记
  • 原文地址:https://www.cnblogs.com/yumianhu/p/3713380.html
Copyright © 2020-2023  润新知