Ошибка типа: req.checkBody не является функцией. Экспресс-валидатор не работает и проверка не проходит?
Я определяю почтовый маршрут, который обрабатывает запрос на отправку. Я написал следующий код в моем маршруте user.js:
var express = require('express');
var router = express.Router();
var multer = require('multer');
var upload = multer({dest:'./uploads'});
router.post('/register', upload.single('profileimage'), function(req, res, next) {
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;
if(req.file){
var profileImage = req.file.filename;
}
else{
var profileImage = 'noimage.jpg';
}
//form validation
req.checkBody('name', 'Name feild is reqiured').notEmpty();
req.checkBody('email', 'Email feild is reqiured').notEmpty();
req.checkBody('email', 'Email feild is reqiured').isEmail();
req.checkBody('username', 'Name feild is reqiured').notEmpty();
req.checkBody('password', 'PasswordUser feild is reqiured').notEmpty();
req.checkBody('password2', 'Password donot match').equals(req.body.password);
//check Errors
var errors = req.validationErrors();
if(errors){
res.render('register', {
errors: errors
});
console.log(errors);
}
else{
Console.log('No Errors');
}
});
В моем app.js уже был определен экспресс-валидатор, как показано ниже:
var expressValidator = require('express-validator');
var app = express();
app.use(expressValidator({
errorFormatter: function(param, msg, value){
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length) {
formParam += '[' + namespace.shift()
}
return{
param: formParam,
msg: msg,
value: value
};
}
}));
Ошибка TypeError: req.checkBody не является функцией, которая отображается в браузере каждый раз, когда я нажимаю кнопку "Отправить" для проверки правильности. Пожалуйста, дайте мне знать, что отсутствует в коде, или какие-либо изменения, необходимые.
Уже прошел по ссылке, указанной ниже, но у меня это не сработало . TypeError: req.checkBody не является функцией
1 ответ
Я сделал простое приложение, попробуйте переписать ваш код в соответствии с этим, он отлично работает
файл app.js
var express = require('express');
var expressValidator = require('express-validator');
var app = express();
var router = express.Router();
var bodyParser = require("body-parser");
var cors = require('cors');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
app.use(expressValidator({
errorFormatter: function(param, msg, value){
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length) {
formParam += '[' + namespace.shift()
}
return{
param: formParam,
msg: msg,
value: value
};
}
}));
// I pass app to the users.js file, because express validator I've assigned
// to this express app instance
require('./users')(app);
app.listen(3300);
Вы можете пропустить парсер и корс. Файл users.js выглядит так
module.exports = function (app) {
app.post('/register', function(req, res, next) {
req.checkBody('name', 'Name feild is reqiured').notEmpty();
var errors = req.validationErrors();
if(errors){
res.status(400).json({"errors": errors});
}
else{
Console.log('No Errors');
res.status(200).json({"foo": "bar"});
}
});
};
Я использую app.post('/register'), потому что экспресс-маршрутизатор должен быть создан, и если вы создадите маршрутизатор для нового экспресс-объекта, у вас не будет соединения с экспресс-валидатором, потому что этот экспресс-валидатор был назначен другому экспресс-объекту, который вы созданный в файле app.js.