Jade html在Express.js中redirect后没有更新

我目前在使用Jade的模板引擎和连接闪存在Express.js显示Flash消息时遇到了一些麻烦。 我只是试图刷新错误信息,当用户试图添加一个新的用户对象到我的数据库已经存在。 但是,在调用router.post并redirect到索引(下面的代码)之后,我的页面上没有显示Flash消息。

通过各种console.log和debugging,我发现我发布的数据确实发布正确,并且正在设置flash消息。 我发现,在redirect,所有正确的数据传递到Jade模板,但variables不被更新文件本身。 我现在想知道,如果这是一个会议相关的问题,或者只是一些Flash / Jade / Express相关,我完全忽略?

在下面的代码中,我logging会话数据以及将闪存消息设置为一个variables。 如果Flash消息的数组是空的(例如,在页面加载时),则将数组设置为具有这样的消息。 如果Flash消息(s)数组包含闪存消息,则testing数组将被设置为一条消息。

index.js

 router.get('/', function(req, res, next) { console.log(req.session); var testArray; var errorMessages = req.flash('user-error'); if (errorMessages.length === 0) testArray = ['errorMessages is empty']; else testArray = ['errorMessages contains a message now']; console.log(errorMessages); console.log(testArray); res.render('index', { message: errorMessages, tester: testArray, ...other irrelevant vars being passed... }); }); router.post('/add', function(req, res, next) { var ajaxData = req.body; console.log(ajaxData); User.findOne({name: ajaxData.name}, function(err, user) { if (err) return console.error(err); // if User DNE already in DB if (user === null) { ...new user created and saved here... } /*where the important stuff begins*/ else { console.log("flash message set"); req.flash('user-error', "A user with that name already exists!"); } // redirect to index res.redirect('/'); }); }); 

在我的Jade模板中,我再次loggingerrorMessages和testArray,以确保所有东西都正确地传递到文件(它是),然后显示variables。

index.jade

 -console.log(message); -console.log(tester); .error-box Error: #{message} .error-box Error: #{tester} 

最初加载页面,我会得到下面的HTML输出:

 <div class="error-box">Error: </div> <div class="error-box">Error: errorMessages is empty</div> 

这里没有什么惊喜。 但是,当我提交表单的数据,设置错误的Flash消息,我得到router.get('/')日志从router.get('/')index.jade与正确的errorMessagestestArrayvariables。 但是,我的HTML输出保持不变:

 <div class="error-box">Error: </div> <div class="error-box">Error: errorMessages is empty</div> 

很明显,传递给Jade的variables正在被正确更新,但是看起来Jade并没有更新HTML。 由于我对连接闪存和Jade的工作知之甚less,这将导致我相信这是一个与会话有关的问题,但是我的代码在app.js看起来是正确设置的。

 var session = require('express-session'); var flash = require('connect-flash'); app.use(session({ secret: 'secret', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); app.use(flash()); 

我对Express.js比较Express.js ,所以我觉得可能会有一些我可以忽略或者不明白的东西,但是我尽可能地详尽,所以我希望有人能够帮助我。

经过更仔细的检查后,我发现真正导致问题的是res.redirect('/')没有运行,因为我试图在客户端使用AJAX来调用router.post('/add')

我通过简单地删除我的AJAX请求,然后回到我的HTML和改变我的表单的属性(我通过AJAX发送的数据的forms)包括method="POST"action="/add" 。 这是对我的router.post('/add')进行SERVER SIDE调用的正确方法。

我发现有人在这里有同样的问题, 这个问题最初导致我看看AJAX /客户端与服务器端问题。 在这篇文章中,我从@herbyme的评论中发现了后一个问题。