簡體   English   中英

req.checkBody不是函數,快速驗證中間件不起作用

[英]req.checkBody is not a function, express-validator middleware not working

這是我在網上學習全棧時使用的代碼,因為這是他們使用的代碼,但是我不斷收到錯誤消息,說req.checkBody不是函數。 我嘗試過恢復到早期版本的express-validator,但似乎也不能這樣做。 顯然express-validator已更新,這就是為什么req.checkBody不再是一個函數,但我似乎無法修復我的代碼的原因。

var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var db = mongojs('passportapp', ['users']);
var bcrypt = require('bcryptjs');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

// Login Page - GET
router.get('/login', function(req, res){
    res.render('login');
});

// Register Page - GET
router.get('/register', function(req, res){
    res.render('register');
});

// Register - POST
router.post('/register', function(req, res){
    // Get Form Values
    var name = req.body.name;
    var email = req.body.email;
    var username = req.body.username;
    var password = req.body.password;
    var password2 = req.body.password2;

    // Validation
    req.checkBody('name', 'Name field is required').notEmpty();
    req.checkBody('email', 'Email field is required').notEmpty();
    req.checkBody('email', 'Please use a valid email address').isEmail();
    req.checkBody('username', 'Username field is required').notEmpty();
    req.checkBody('password', 'Password field is required').notEmpty();
    req.checkBody('password2', 'Passwords do not match').equals(req.body.password);

    // Check for errors
    var errors = req.validationErrors();

    if(errors){
        console.log('Form has errors...');
        res.render('register', {
            errors: errors,
            name: name,
            email: email,
            username:username,
            password: password,
            password2: password2
        });
    } else {
        var newUser = {
            name: name,
            email: email,
            username:username,
            password: password
        }

        db.users.insert(newUser, function(err, doc){
            if(err){
                res.send(err);
            } else {
                console.log('User Added...');

                //Success Message
                req.flash('success', 'You are registered and can now log in');

                // Redirect after register
                res.location('/');
                res.redirect('/');
            }
        });
    }
});

module.exports = router;

我收到此錯誤:

TypeError: req.check is not a function
    at E:\Desktop\website\routes\users.js:22:6
    at Layer.handle [as handle_request] (E:\Desktop\website\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\Desktop\website\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\Desktop\website\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\Desktop\website\node_modules\express\lib\router\layer.js:95:5)
    at E:\Desktop\website\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\Desktop\website\node_modules\express\lib\router\index.js:335:12)
    at next (E:\Desktop\website\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (E:\Desktop\website\node_modules\express\lib\router\index.js:174:3)
    at router (E:\Desktop\website\node_modules\express\lib\router\index.js:47:12)

確保您已安裝express-validator

npm i express-validator

然后像這樣導入它:

var api = express.Router();

var expressValidator = require('express-validator');
api.use(expressValidator())

TypeError:req.checkBody不是包含bodyparser和expressvalidator模塊的函數

將驗證導出為您的驗證模塊,您可以使用express-validator或者當前我正在使用validator並返回錯誤對象的更多對象。

創建文件validateRegisterInput.js根據您的ES版本和ts更改語法

const Validator = require('validator')

module.exports = function validateRegisterInput(data) {
  let errors = {}
  data.email = data.email ? data.email : ''
  data.password = data.password ? data.password : ''

  if (!Validator.isEmail(data.email)) {
    errors.email = 'Email is invalid'
  }

  if (Validator.isEmpty(data.email)) {
    errors.email = 'Email is required'
  }

  if (!Validator.isLength(data.password, { min: 6, max: 30 })) {
    errors.password = 'Password must have 6 chars'
  }
    ....... // do more validation here
  return {
    errors,
    isValid: isEmpty(errors)
  }
} 

在route.js文件導入

const validateRegisterInput = require('./middleware/validateRegisterInput')
....
router.post('/register', (req, res) => {
    const { errors, isValid } = validateRegisterInput(req.body)
    if (!isValid) {
      return res.status(400).json({ 
              'response_code': 400,
              'message': 'error',
              'errors': errors 
           })
    } else {
      // create User
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM