Ajax 在Express.js中重定向后未更新Jade html

Ajax 在Express.js中重定向后未更新Jade html,ajax,node.js,express,pug,connect-flash,Ajax,Node.js,Express,Pug,Connect Flash,我目前在使用Jade的模板引擎和connect flash在Express.js中显示flash消息时遇到一些问题。当用户试图将新的用户对象添加到我已经存在的数据库时,我只是试图闪现一条错误消息。但是,在调用router.post并重定向回索引(下面的代码)后,flash消息没有显示在我的页面上 通过各种console.log和调试,我发现我正在发布的数据确实是正确的,并且正在设置flash消息。我发现,在重定向中,所有正确的数据都会传递到Jade模板,但变量不会在文件本身中更新。我现在想知道这

我目前在使用Jade的模板引擎和connect flash在
Express.js
中显示flash消息时遇到一些问题。当用户试图将新的用户对象添加到我已经存在的数据库时,我只是试图闪现一条错误消息。但是,在调用router.post并重定向回索引(下面的代码)后,flash消息没有显示在我的页面上

通过各种console.log和调试,我发现我正在发布的数据确实是正确的,并且正在设置flash消息。我发现,在重定向中,所有正确的数据都会传递到Jade模板,但变量不会在文件本身中更新。我现在想知道这是一个与会话相关的问题,还是我完全忽略了与Flash/Jade/Express相关的问题

在下面的代码中,我记录会话数据,并将flash消息设置为变量。如果闪存消息的数组为空(即在页面加载时),则会使用显示为空的消息设置一个数组。如果闪存消息阵列包含闪存消息,则测试阵列将设置一条这样的消息

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模板中,我再次记录errorMessages和testArray,以确保所有内容都正确地传递到文件(它是),然后显示变量

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>
显然,传递给Jade的变量正在正确更新,但Jade似乎根本没有更新HTML。由于我对connect flash和Jade的工作原理了解有限,因此我认为这是一个与会话相关的问题,但是我在
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
比较陌生,所以我觉得可能有一些小事情我忽略了或不理解,但我已经尽量详细,所以我希望有人能在这里帮助我

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

我只需删除AJAX请求,然后返回HTML并更改表单属性(我通过AJAX发送其数据的表单)以包括
method=“POST”
action=“/add”
,就可以解决这个问题。这是对我的
router.post('/add')
进行服务器端调用的正确方法


我发现有人也有同样的问题,并在最初引导我研究AJAX/客户端与服务器端的问题。我在@herbyme on的评论中发现了后一个问题。

Wow,似乎是一个对任何人都没有用处的特定错误。但我只是做了几乎完全相同的事情!这节省了我很多时间。
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());