簡體   English   中英

出現錯誤:req.validatonErrors 不是 function 但我不知道為什么

[英]Getting error: req.validatonErrors is not a function but I'm not sure why

我很新,正在學習關於 node/express/mongo 的 Udemy 課程,但是我遇到了一個我無法解決的問題。 我在我的表單代碼中使用了 express-validator 並且無法克服這個錯誤。 我懷疑我使用 express-validator 的方式存在一些錯誤。

在 users.js 中

var express = require('express');
var router = express.Router();
var multer = require('multer');
var upload = multer({dest: './uploads'});

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

// Register Page
router.get('/register', function(req, res, next) {
  res.render('register', { title: 'Register Page'})
});
// Login Page
router.get('/login', function(req, res, next) {
  res.render('login', { title: 'Login Page'})
});

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){
    console.log('Uploading Picture file...')
    var profileimage = req.file.filename;
  } else {
    console.log('No file uploaded');
    var profileimage = 'noimage.jpg';
  }
  // Form Validator
  req.checkBody('name', 'Name field is required').notEmpty();
  req.checkBody('email', 'Email field is required').notEmpty();
  req.checkBody('email', 'Email is not valid').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 Errors
  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
      };
    }
  }));
  if(errors){
    res.render('register', {
    errors: errors
  });
  } else {
  console.log('No Errors')
  }
});

module.exports = router;

在 app.js 中

var express = require('express');
var path = require('path');
//var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var expressValidator = require('express-validator');
var multer = require('multer');
var upload = multer({dest: './uploads'});
var flash = require('connect-flash');
//var bcrypt = require('bcryptjs');
var mongo = require('mongodb');
var mongoose = require('mongoose');
var db = mongoose.connection;

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');

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(session({
  secret:'secret',
  saveUninitialized: true,
  resave: true
}));

// Passport
app.use(passport.initialize());
app.use(passport.session());

// Validator
app.use(expressValidator())

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;

在 register.pug

extends layout

block content
  h2.page-header Register
  p Please register using the form below
  form(action="/users/register", method="post", enctype='multipart/form-data')
    .form-group
    label Name
    input.form-control(name='name', type='text', placeholder='Enter Name')
    .form-group
    label Email
    input.form-control(name='email', type='text', placeholder='Email')
    .form-group
    label Username
    input.form-control(name='username', type='text', placeholder='Username')
    .form-group
    label Password
    input.form-control(name='password', type='password', placeholder='Password')
    .form-group
    label Confirm Password
    input.form-control(name='password2', type='password', placeholder=' Confirm Password')
    .form-group
    label Profile Image
    input.form-control(name='profileimage', type='file')
    input.btn.btn-primary(type='submit', name='submit', value='Submit')

謝謝你的幫助!

我認為 express 驗證器更改了他們的文檔和 github 頁面,您不必使用更長的中間件。 https://express-validator.github.io/docs/5.3.0/index.html

// Check Errors
  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
      };
    }
  })); 

我不確定是否與此有關,但是。 試試看嘛

const { check, validationResult } = require('express-validator'); 而不是它

其實我不是專業人士,但我只是想幫助你。 如果它是錯誤的,我們將研究並做到這一點,直到我們實現。

暫無
暫無

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

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