Экспресс-валидатор - req.checkBody не является функцией - PullRequest
0 голосов
/ 15 мая 2018

Я пытался исправить это в течение 2 часов, и я немного расстроен.По сути, я хочу проверить ввод данных формы, но я всегда получаю эту ошибку.

TypeError: req.checkBody is not a function
at C:\Users\bobbo\Desktop\Develops\Project_folder\routes\index.js:19:7
at Layer.handle [as handle_request] (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:47:12)

Практически единственная информация, которую я могу найти, - это указание написать app.use(expressValidator()); после app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));, но этоне важно, что я делаю, я все равно получаю ту же ошибку.Вот код, который я использую.

//index.js    
    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    var expressValidator = require('express-validator');

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(expressValidator());
    var router = express.Router();
    router.get('/', function(req, res, next) {
      res.render('index', { title: 'Express' });
    });

    router.get('/signup', function(req, res, next) {
      res.render('signup', { title: 'Express' });
    });

    router.post('/signup', function(req, res){
      var name = req.body.name;
      console.log(name);    //works
      req.checkBody("name", "Invalid name").notEmpty();
      var errors = req.validationErrors();
      if(errors){
        console.log('errors');
      } else{
        console.log('no errors');
      }
    });
    module.exports = router;

app.js

//app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// BodyParser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// 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;

package.json

    //package.json
{
  "name": "pizzaonline",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "^1.18.3",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.16.0",
    "express-session": "^1.15.6",
    "express-validator": "^5.2.0",
    "http-errors": "~1.6.2",
    "morgan": "~1.9.0",
    "pug": "2.0.0-beta11"
  }

}

Если я прокомментируюout req.checkBody("name", "Invalid name").notEmpty();, следующий код экспресс-проверки, который должен быть выполнен, - var errors = req.validationErrors();, что дает мне ту же ошибку, говорящую мне, что req.validationErrors() не является функцией.Я новичок в этом, но это говорит мне, что экспресс-валидатор установлен неправильно, я не прав?Буду признателен за любую оказанную помощь.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019
npm i --save express-validator@4

reqiure app.js

app.use(expressValidator());

и попробуйте снова

npm start
0 голосов
/ 16 мая 2018

В ваших вложенных файлах маршрутов (index.js и users.js) Вы создаете новый экземпляр приложения и присоединяете к нему тот валидатор, который на самом деле неверен.

Создаете новый экземпляр приложения. Высоздайте новый контекст приложения, отличный от app в app.js.

Итак, вот исправление:

1) прикрепите экспресс-валидатор над этими строками в app.js файле:

app.use(expressValidator());


app.use('/', indexRouter);
app.use('/users', usersRouter);

2) удалить app создание объекта из вложенных файлов маршрутов и сделать его похожим на:

//index.js    
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.get('/signup', function(req, res, next) {
  res.render('signup', { title: 'Express' });
});

router.post('/signup', function(req, res){
  var name = req.body.name;

  req.checkBody("name", "Invalid name").notEmpty();
  var errors = req.validationErrors();
  if(errors){
    console.log('errors');
  } else{
    console.log('no errors');
  }
});

module.exports = router;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...