【问题标题】:require method called by function not working需要由函数调用的方法不起作用
【发布时间】:2017-03-27 10:18:18
【问题描述】:

我在为某些路由设置一些中间件时遇到了这个问题。在我的应用程序中,我的联系页面上只需要 session 和 csrf。

这就是问题所在。当我在外面需要它们并将数组中的引用用作路由参数时,一切正常。 Session 工作正常,并且期望每个请求都使用相同的 cookie(sessionID),并且应该通过 CSRF 检查。

但是,当我使用函数返回“中间件”数组时,它的行为异常。当我“获得”联系时,我收到一个 sessionID,当我向它“发布”时,显然会话重新启动,并且由于我有旧的 sessionID,我收到了一个错误。奇怪的是,CSRF 还期望另一个 csrf 令牌,而不是它发送给我的那个。

我知道这与我在模块中要求的方式有关,但我很想清楚地解释为什么会发生这种情况。请注意我是初学者,所以请放轻松:) 谢谢!

// MIDDLEWARE FOR CERTAIN ROUTES
// This works fine!
var session = require('express-session')({secret: 'i lit fire to the rain', saveUninitialized: false, resave: true});
var csrf = require('csurf')();
router.get('/contact', [session, csrf], function(req, res, next) {
});
router.post('/contact', [session, csrf], function(req, res, next) {
});

// but this does not work
var contactMiddleware = function() {
    var session = require('express-session')({secret: 'i lit fire to the rain', saveUninitialized: false, resave: true});
    var csrf = require('csurf')();
    return [session, csrf];
};
router.get('/contact', contactMiddleware(), function(req, res, next) {
});
router.post('/contact', contactMiddleware(), function(req, res, next) {
});

【问题讨论】:

  • 这和 PHP 有什么关系?
  • 啊,搞错了:)

标签: node.js session express csrf middleware


【解决方案1】:

您好,您是否尝试过这样做:

router.get('/contact', contactMiddleware, function(req, res, next)

编辑: 所以据我所知,你只需要一个静态数组,所以为什么不这样做

var array = (function() { var session = require('express-session')({secret: 'i lit fire to the rain', saveUninitialized: false, resave: true}); var csrf = require('csurf')(); return [session, csrf]; })(); 然后将你的数组传递给路由?

router.get('/contact', array, function(req, res, next) { res.send('contact'); });

【讨论】:

  • 我做到了,但它用于“挂起”的请求,所以我在函数末尾调用了 next() 。我最终得到了 404,但没有成功。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2021-05-10
  • 2020-11-07
  • 1970-01-01
  • 2016-04-10
  • 2021-06-11
相关资源
最近更新 更多