2014-02-17 84 views
2

我想在我的应用程序中使用express-validator快速验证错误与快速验证程序

这里是我的app.js代码:

app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.logger('dev')); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.bodyParser()); 
app.use(express.urlencoded()); 
app.use(express.json()); 
app.use(expressValidator()); 

下面是我路线

module.exports = function(app) { 
    app.post('/login', userController.login); 
} 

这里是我的登录代码:

exports.login = function(req, res, next) { 
    req.assert('email', 'Email not valid').isEmail(); 

    var errors = req.validationErrors(); 

    if (errors) { 
     return res.redirect('/login'); 
    } 

    passport.authenticate('local', function(err, user, info) { 
     // do stuff 
    })(req, res, next); 
}; 

当我尝试发布到/登录我得到了follwoing错误信息的内容:

TypeError: Object # <IncomingMessage> has no method 'assert' 

我看到了,这可能涉及与app.use一个问题,但现在我卡住了...

编辑1: 我我app.use改变这些的,但它并没有解决我的问题:

app.use(express.logger('dev')); 
app.use(express.methodOverride()); 
app.use(express.bodyParser()); 
app.use(express.urlencoded()); 
app.use(express.json()); 
app.use(expressValidator()); 
app.use(app.router); 
+0

我的坏...我在app.use()之前导入了我的路由文件,所以没有考虑到所有中间件! –

回答

0

您应该只后你打算使用任何中间件使用app.router在您的路线:

的原因是,在声明中间件Express中的顺序是非常重要的:如果你expressValidator前加app.router,这意味着,路由器中间件将得到处理验证之前请求中间件甚至被称为并有机会将其魔术添加到req

+0

我试图把app.router放在我的app.use的末尾,但我仍然有同样的错误:( –

0

我有同样的问题!您app.jsroute.js代码就好了,但在你的登录代码,你必须从改变:

req.assert('email', 'Email not valid').notEmpty(); 

和替换它:

req.check('email', 'Email not valid').notEmpty(); 

如果你看到上线198码https://github.com/ctavan/express-validator/blob/master/lib/express_validator.js断言仅供检查的别名。而且似乎有一个与“assert”这个名字有关的问题,可能会让nodejs感到困惑,因为有一个名为“assert”的模块,这只是一个猜测。无论如何,它似乎工作得很好。

希望它有帮助!