500 TypeError:对象#<incomingmessage>没有方法&#39; csrfToken&#39; </incomingmessage>

时间:2014-11-27 09:24:49

标签: node.js express

我正在尝试使用Express为我的Nodejs应用添加csrf保护。 当我添加这个midlleware时:

 app.use(function (req, res, next) {  
    res.locals.csrftoken = req.csrfToken();
});

我收到此错误:

500 TypeError: Object #<IncomingMessage> has no method 'csrfToken'

有人可以帮我解决这个问题。

这是我的app.js代码:

var express = require('express')


     , routes = require('./routes') 
      , http = require('http')
      , path = require('path');

     var app = express();

     app.configure(function () {
        app.set('port', process.env.PORT || 3000);
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade');
        app.use(express.favicon());
        app.use(express.logger('dev'));

        app.use(express.bodyParser());
        app.use(express.cookieParser());
        app.use(express.session({ secret: 'the secret' }));
        app.use(express.csrf());

     app.use(function (req, res, next) {  
            res.locals.csrftoken = req.csrfToken();
        });



    app.use(express.methodOverride());  
    app.use(app.router);


    app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler()); 
});

1 个答案:

答案 0 :(得分:0)

除了static之外,CSRF和其他中间件不再与快递4.x捆绑在一起 - 我的假设是您使用4.x

如果您的快速版本是4.x,那么您需要手动安装csurf并使用该版本代替express.csrf()

查看有关中间件https://github.com/senchalabs/connect?#middleware的详细信息,并在此处更改说明http://expressjs.com/guide/using-middleware.html#middleware.built-in

稍后编辑:对于Express 3.x分支,您需要 3.4.0 的最低版本,因为csrfToken()方法首次出现在express@3.4.0中},connect更新为2.9.0时的包,这是提供connect方法的第一个csrfToken版本。