快递validation错误与快速validation程序

我想在我的应用程序中使用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); } 

这里是我的代码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); }; 

当我尝试发布/login时,我得到了以下错误消息:

 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); 

只有在路由中使用任何中间件之后,才应该使用app.router

 app.use(express.methodOverride()); app.use(express.bodyParser()); app.use(express.urlencoded()); app.use(express.json()); app.use(expressValidator()); app.use(app.router); 

原因在于你使用Express声明中间件的顺序是非常重要的:如果你在app.router之前添加app.router ,这意味着路由器中间件将在确认器中间件被调用之前处理请求,并有机会将其魔法添加到req

我遇到过同样的问题! 你的app.jsroute.js代码很好,但是在你login的代码中,你必须改变:

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

并replace为:

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

如果您在第198行看到代码https://github.com/ctavan/express-validator/blob/master/lib/express_validator.js,assert只&#x662F;检查的别名。 似乎有一个问题,这个名字“断言”,也许混淆nodejs,因为有一个模块叫“断言”,只是一个猜测。 无论如何,似乎工作得很好。

希望能帮助到你!