NodeJS - Express 4.0下使用app.dynamicHelpers錯誤


在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的值會在第一次訪問之后會被清除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM