Javascript 使用hapi/Joi进行Express JS表单验证';无法正确验证表单数据

Javascript 使用hapi/Joi进行Express JS表单验证';无法正确验证表单数据,javascript,express,ejs,Javascript,Express,Ejs,我有一个表单,我正试图使用hapi/Joi包验证它,但它不从表单中获取值。相反,它返回第一个验证错误,因为所有模式键的值都为“undefined”。我怎样才能解决这个问题?还有没有一种方法可以在不刷新Express中的页面的情况下向用户打印错误?如果是,请让我知道 我的快递代码: const express = require('express'); const app = express(); const path = require('path'); const bodyParser = r

我有一个表单,我正试图使用hapi/Joi包验证它,但它不从表单中获取值。相反,它返回第一个验证错误,因为所有模式键的值都为“undefined”。我怎样才能解决这个问题?还有没有一种方法可以在不刷新Express中的页面的情况下向用户打印错误?如果是,请让我知道

我的快递代码:

const express = require('express');
const app = express();
const path = require('path');
const bodyParser = require('body-parser');
const Joi = require('@hapi/joi');
const uuidv4 = require('uuid/v4');

app.set('view engine','ejs');

const urlEncodedParser = app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.use(express.static(path.join(__dirname + '/public')));

app.get('/',(req,res)=>{
    res.render('main');
});

const schema = Joi.object().keys({
    name: Joi.string().min(3).required(),
    surname: Joi.string().min(5).required(),
    age: Joi.number().integer(),
    email: Joi.string().email({minDomainSegments: 2}).required(),
    password: Joi.string().min(3).required(),
    confirm: Joi.any().valid(Joi.ref('password'))
});

app.post('/register',(req,res)=>{
    req.body.id = uuidv4();
    console.log(req.body);
    const result = Joi.validate({

        name: req.body.name,
        surname: req.body.surname,
        age: req.body.age,
        email: req.body.email,
        password: req.body.password,
        confirm: req.body.confirm

    }, schema,(error,value)=>{
        if(error){

            printError(error);

        }
        else{
            console.log('success');
        }
    });

});

function printError(error){
    console.log(error);
}

app.listen(3000);
我的表格:

<form action="/register" method="POST" enctype="multipart/form-data">

        <input type="text" name='name' class="form-control" value="">
        <input type="text" name='surname' class="form-control" value="">
        <input type="number" name='age' class="form-control" value="">
        <input type="email" name='email' class="form-control" value="">
        <input type="password" name='password' class="form-control">
        <input type="password" name='confirm' class="form-control">
        <input type="submit" class="btn btn-block btn-success" value="OKAY">

    </form>
即使在我填写表单中输入的姓名并按enter键时,它也会显示“需要姓名”。

Change

const urlEncodedParser = app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());


我看不到你的控制台。log(req.body)返回什么,也不再需要body解析器,express 4+自带内置的body解析器。Iv'e刚刚检查过,似乎没有返回任何内容。对于需要multer或busboy的文件,body解析器或express解析器无法处理
多部分/formdata
。退房
const urlEncodedParser = app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));