Node.js 如何使用节点和Passport验证非空字段?

Node.js 如何使用节点和Passport验证非空字段?,node.js,validation,passport.js,Node.js,Validation,Passport.js,我需要验证登录(post请求)的非空字段,但出现以下错误: TypeError: req.checkBody is not a function at D:\IDoo projects\ExpressGenerado\config\routes.js:76:9 这是我的路线文件: app.post('/login',function(req,res){ req.checkBody('email', 'Email is required').notEmpty(); r

我需要验证登录(post请求)的非空字段,但出现以下错误:

TypeError: req.checkBody is not a function
    at D:\IDoo projects\ExpressGenerado\config\routes.js:76:9
这是我的路线文件:

  app.post('/login',function(req,res){
    req.checkBody('email', 'Email is required').notEmpty();
    req.checkBody('password', 'Password is required').notEmpty();
    var errors = req.validationErrors();

    if (errors) {

        res.render('signup',{message: req.flash('loginMessage')});

    }
    else{
        passport.authenticate('local-login', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/login', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        })(req,res); 
    }
}); 
和我的入口点应用程序文件,在添加app.use(expressValidator)后,我的web挂起且不进行验证,它不执行任何操作:

var express = require('express');
var expressValidator = require ('express-validator');
var app = express();
var multer = require('multer')
var constants = require('constants');
var constant = require('./config/constants');   

var port = process.env.PORT || 8042;
var passport = require('passport');
var flash = require('connect-flash');
var path = require('path');

var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

var dateFormat = require('dateformat');
var now = new Date();
app.use(expressValidator); 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));


require('./config/passport')(passport); // pass passport for configuration


app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)

app.use(express.static(path.join(__dirname, 'public')));
app.set('views', path.join(__dirname, 'app/views'));
app.set('view engine', 'ejs');

app.use(session({ secret: 'zomaareenstukjetekstDatjenietzomaarbedenkt' })); 
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session


require('./config/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

app.listen(port);
console.log('The magic happens on port ' + port);
您正在这样做:

app.use(expressValidator);
但是,
expressValidator
是一个返回中间件函数的函数,因此您需要像这样使用它:

app.use(expressValidator());

req.checkBody()
由提供,它要么没有加载到您的Express应用程序中,要么加载不正确(应该在声明
POST/login
路由之前加载)。我添加了:var expressValidator=require('Express-validator');应用程序使用(expressValidator);在我的express应用程序中,但它不起作用。不显示错误,但冻结和不验证。这看起来不正确:
expressValidator
是一个返回中间件函数的函数,但您没有调用它。这通常会导致请求挂起,但在您的情况下不会发生这种情况,这意味着您可能添加它“太晚了”。你能发布一个(简明的)版本来说明你是如何设置你的Express应用程序、中间件和路由的吗?我更新了我的问题有趣的秘密;D