[英]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())
將驗證導出為您的驗證模塊,您可以使用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.