Node.js 如何在res.重定向期间传递数据?

Node.js 如何在res.重定向期间传递数据?,node.js,express,Node.js,Express,我的视图依赖于某些数据进行渲染,如下所示: router.get("/", (req, res) => { res.render( 'index', { data: layout_data, user: req.user } ); }); router.post('/login', passport.authenticate('local'), function(req, res) {

我的视图依赖于某些数据进行渲染,如下所示:

router.get("/", (req, res) => {
    res.render(
        'index', {
            data: layout_data,
            user: req.user
        }
    );
});

router.post('/login', passport.authenticate('local'), function(req, res) {
    res.redirect('/');
});
router.get("/", (req, res) => {
    req.mydata = {};
    req.mydata.layout_data = layout_data;
    res.render(
        'index', {
            data: req.mydata.layout_data,
            user: req.user
        }
    );
});

router.post('/login', parseForm, csrfProtection, passport.authenticate('local'), function(req, res) {
    if (!req.mydata) {
        req.mydata = {};
    }
    req.mydata.layout_data = layout_data;
    res.redirect('/');
});
它起作用了。但是当我添加csurf中间件时

router.post('/login', parseForm, csrfProtection, passport.authenticate('local'), function(req, res) {
    res.redirect('/');
});
布局引擎告诉我,
数据
未定义。我怀疑csurf中间件会擦除数据

我试着这样修复它:

router.get("/", (req, res) => {
    res.render(
        'index', {
            data: layout_data,
            user: req.user
        }
    );
});

router.post('/login', passport.authenticate('local'), function(req, res) {
    res.redirect('/');
});
router.get("/", (req, res) => {
    req.mydata = {};
    req.mydata.layout_data = layout_data;
    res.render(
        'index', {
            data: req.mydata.layout_data,
            user: req.user
        }
    );
});

router.post('/login', parseForm, csrfProtection, passport.authenticate('local'), function(req, res) {
    if (!req.mydata) {
        req.mydata = {};
    }
    req.mydata.layout_data = layout_data;
    res.redirect('/');
});
它仍然不起作用。数据仍然没有定义


解决此问题的最佳做法是什么?

我的猜测是:您的
布局\u数据未定义。

重定向URL时,它将变成GET请求。在GET请求中,您需要使用URL查询。@parats,但当我从中间件中删除
csrfProtection
时,它会起作用。