#node.js #express #express-validator
#node.js #экспресс #экспресс-валидатор
Вопрос:
Я использую экспресс-валидатор для проверки ввода пользователя, но он всегда показывает ошибку, даже если ввод правильный.
Мой app.js
var createError = require('http-errors'); var express = require('express'); var favicon = require('serve-favicon'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var expressLayouts = require('express-ejs-layouts'); var indexRouter = require('./routes/index'); var app = express(); app.use(favicon(path.join(__dirname, 'public', 'images', 'site-favicon.ico'))); app.use(logger('dev')); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(__dirname '/public')); // view engine setup app.use(expressLayouts); app.set('views', [ path.join(__dirname, 'views'), path.join(__dirname, 'views/genre/'), path.join(__dirname, 'views/game/'), path.join(__dirname, 'views/developer/'), path.join(__dirname, 'views/partials/'), ]); app.set('layout', './layouts/main'); app.set('view engine', 'ejs'); app.use('/', indexRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
Мой обработчик маршрутов
// Handle Genre create on POST. exports.genre_create_post = [ // Validate and santize the name field. body('name', 'Genre name should be at least 2 characters long') .trim() .isLength({ min: 2, max: 100 }) .escape(), upload.single('genreImage'), // Process request after validation and sanitization. (req, res, next) =gt; { // Extract the validation errors from a request. const errors = validationResult(req); // Create a genre object with escaped and trimmed data. var genre = new Genre({ name: req.body.name }); if (!errors.isEmpty()) { console.log(req.body) console.log(errors.array()); res.render('genre_form', { title: 'Create genre', errors: errors.array() }); return; } if (!req.hasOwnProperty('file')) { console.log(genre); res.render('genre_form', { title: 'Create Genre', error: 'Image is required to make genre' }); return; } else { // console.log(req.file) genre.genreImage = req.file.path.substring(6); Genre.findOne({ name: req.body.name }).exec(function (err, found_genre) { if (err) { return next(err); } if (found_genre) { res.redirect(found_genre.url); } else { genre.save(function (err) { if (err) { return next(err); } res.redirect(genre.url); }); } }); } }, ];
My form written in ejs
lt;maingt; lt;div class="forms"gt; lt;h1gt;Create a New Genrelt;/h1gt; lt;hr /gt; lt;div class="formDiv"gt; lt;form action="/genre/create" method="POST" enctype="multipart/form-data"gt; lt;label for="name"gt;Genre Namelt;/labelgt; lt;input type="text" id="name" placeholder="Please enter genre name" name="name" required="true" /gt; lt;label for="genreImage"gt;Genre Imagelt;/labelgt; lt;input type="file" id="genreImage" name="genreImage" /gt; lt;button class="btn" type="submit"gt;Submitlt;/buttongt; lt;/formgt; lt;/divgt; lt;div class="errors-list"gt; lt;% if (typeof errors != 'undefined') { %gt; lt;ul class=""gt; lt;% errors.forEach(error =gt; { %gt; lt;ligt;lt;h2gt;lt;%= error.msg %gt;lt;/h2gt;lt;/ligt; lt;% }); %gt; lt;/ulgt; lt;% } %gt; lt;% if (locals.error) { %gt; lt;ul class=""gt; lt;ligt;lt;h2gt;lt;%= error%gt;lt;/h2gt;lt;/ligt; lt;/ulgt; lt;% } %gt; lt;/divgt; lt;/divgt; lt;/maingt;
Поэтому, когда я пытаюсь ввести имя, содержащее более 2 символов, оно все равно выдает ошибки, показывающие, что название жанра должно быть длиннее 2 символов. Кто-нибудь может мне помочь?