快递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.js和route.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只是检查的别名。 似乎有一个问题,这个名字“断言”,也许混淆nodejs,因为有一个模块叫“断言”,只是一个猜测。 无论如何,似乎工作得很好。
希望能帮助到你!