Javascript 表单验证react js node js存在问题

Javascript 表单验证react js node js存在问题,javascript,node.js,reactjs,forms,validation,Javascript,Node.js,Reactjs,Forms,Validation,所以我刚刚用node js和react js准备好一个表单,当我试着用Postman添加一个用户时,它与验证和其他一切都很好地工作,但后来我尝试将它链接到我的字体端,但它没有工作,问题是如果我输入真实的数据,它将被添加到我的数据库中,并移动到下一页,当我输入错误的数据时,它不会被添加到我的后端,但它仍然会移动到下一页 node js userModel.js const mongoose = require('mongoose') const bcrypt = require('bcrypt'

所以我刚刚用node js和react js准备好一个表单,当我试着用Postman添加一个用户时,它与验证和其他一切都很好地工作,但后来我尝试将它链接到我的字体端,但它没有工作,问题是如果我输入真实的数据,它将被添加到我的数据库中,并移动到下一页,当我输入错误的数据时,它不会被添加到我的后端,但它仍然会移动到下一页

node js userModel.js 
const mongoose = require('mongoose')
const bcrypt = require('bcrypt')
const saltRounds = (10)
const schema = mongoose.Schema



const userSchema = new mongoose.Schema({
    nom: {
        type: String,
        required: true
    },
    prenom: {
        type: String,
        required: true,
        trim: true // read the spaces
    },
    email: {
        type: String,
        required: true,
        validate: {
            validator: function ValidateEmail(v) {
                if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v)) //w{2,3} lazemha tkoun fila5er .org .com .tn ya3ni . w ba3édha 7aja tetkawén par 2 ou 3 caractéres
                {
                    return (true)
                }
                console.log("You have entered an invalid email address!")
                return (false)
            }
        }
    },
    password: {
        type: String,
        required: true,
        validate: {
            validator: function password1(number){
          var phoneno =/^[A-Za-z]\w{7,14}$/;
          if(phoneno.test(number)){
              return true
            } else {
                console.log("invalid password");
                return false}
            }
        }
    },
    phone: {
        type: String,
        required: true
        /*validate: {
            validator: function phonenumber(number) {
                var phoneno = /^\d{10}$/; //il faut utiliser un nombre a 10 chiffres sans virgule,ni espace
                if (phoneno.test(number)) {
                    return true
                } else {
                    console.log("invalid number");
                    return false
                }
            }
        }*/
    }
    //order: [{
    //type: schema.Types.ObjectId,
    //ref: 'order'
    //}],
    //photo: {
        //type: String
    //}
});

userSchema.pre('save', function(next) {
    this.password = bcrypt.hashSync(this.password, saltRounds);
    next();
})

module.exports = mongoose.model('user', userSchema)
react js gate.js

import axios from 'axios';
import React, { Component } from 'react'



class Gate extends Component {
    constructor(){
        super()
        this.state={
            name:'',
            lastname:'',
            email:'',
            phone:'',
            password:''
        }  
    }
    validate = ()=>{
        var isError = false;
        const errors = {
            emailErr:'',
            passwordErr:'',
        }
        const regex2=/^[A-Za-z]\w{7,14}$/;
        const regex1=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
        if((this.state.password === '')||(this.state.password.length>10)||!regex2.test(this.state.password)){
            isError = true;
            errors.passwordErr = 'verifier votre password'
        }
        if((this.state.email === '')||(this.state.email.length>5)||!regex1.test(this.state.email)){
            isError= true;
            errors.emailErr = 'verifier votre email'
        }
        if(isError){
            this.setState({
                ...this.state,
                ...errors
            })
        }

    }
    envoyer(){
    
        let err = this.validate()
        if(!err){
            axios.post("http://localhost:3050/users/addUser",{
                nom:this.state.name,
                prenom:this.state.lastname,
                email:this.state.email,
                password:this.state.password,
                phone:this.state.phone
            })
            .then(res=>{
                console.log('data',res.data)
                window.location.href='/app/dashboard'
            })
        }
        
    }


    render() {
        console.log(this.state.name)
        console.log(this.state.email)
        console.log(this.state.password)

        return ( 
        <div>
            <form action="">
            <label for="fname">First name:</label><br/>
            <input type="text" id="fname" name="fname" onChange={event=>this.setState({name:event.target.value})} /><br/>
            <label for="lname">Last name:</label><br/>
            <input type="text" id="lname" name="lname" onChange={event=>this.setState({lastname:event.target.value})} /><br/>
            <label for="Email">Email:</label><br/>
            <input type="email" id="email" name="email" onChange={event=>this.setState({email:event.target.value})} />
            {<div style={{fontSize:12,color:'red'}}>{this.state.emailErr}</div>}
            <label for="phone">phone:</label><br/>
            <input type="text" id="phone" name="lname" onChange={event=>this.setState({phone:event.target.value})} /><br/>
            <label for="password">password:</label><br/>
            <input type="password" id="password" name="lname" onChange={event=>this.setState({password:event.target.value})} />
            {<div style={{fontSize:12,color:'red'}}>{this.state.passwordErr}</div>}
            <br/>
            
            <input type="submit" value="Sign In" onClick={()=>{this.envoyer()}} />
            </form>
        </div>
        );
    }
}


export default Gate
           
从“axios”导入axios;
从“React”导入React,{Component}
类门扩展组件{
构造函数(){
超级()
这个州={
名称:“”,
姓氏:“”,
电子邮件:“”,
电话:'',
密码:“”
}  
}
验证=()=>{
var-isError=false;
常量错误={
电子邮件错误:“”,
密码错误:“”,
}
常量regex2=/^[A-Za-z]\w{7,14}$/;
常量regex1=/^\w+([\.-]?\w+*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
if((this.state.password=='')| |(this.state.password.length>10)| |!regex2.test(this.state.password)){
isError=真;
errors.passwordErr='verifier votre password'
}
if((this.state.email=='')||(this.state.email.length>5)||!regex1.test(this.state.email)){
isError=真;
errors.emailErr='verifier votre email'
}
如果(isError){
这是我的国家({
…这个州,
…错误
})
}
}
特使(){
让err=this.validate()
如果(!err){
axios.post(“http://localhost:3050/users/addUser",{
nom:this.state.name,
prenom:this.state.lastname,
电子邮件:this.state.email,
密码:this.state.password,
电话:这个。州。电话
})
。然后(res=>{
console.log('data',res.data)
window.location.href='/app/dashboard'
})
}
}
render(){
console.log(this.state.name)
console.log(this.state.email)
console.log(this.state.password)
报税表(
名字:
this.setState({name:event.target.value})}/>
姓氏:
this.setState({lastname:event.target.value})}/>
电子邮件:
this.setState({email:event.target.value})}/> {{this.state.emailErr}} 电话:
this.setState({phone:event.target.value})}/>
密码:
this.setState({password:event.target.value})}/> {{this.state.passwordErr}}
{this.envoyer()}}/> ); } } 导出默认门

请帮帮我

从验证方法返回错误

这里的工作示例=>

import React,{Component}来自“React”;
类门扩展组件{
构造函数(){
超级();
此.state={
姓名:“,
姓氏:“,
电邮:“,
电话:“,
密码:“”,
电子邮件错误:“”,
密码错误:“
};
}
验证=()=>{
常量错误={
emailErr:null,
密码错误:null
};
常量regex2=/^[A-Za-z]\w{7,14}$/;
常量regex1=/^\w+([\.-]?\w+*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
如果(this.state.password.length>10){
errors.passwordErr=“verifier votre password”;
}
if(!regex1.test(this.state.email)){
errors.emailErr=“verifier votre email”;
}
返回错误;
};
特使=e=>{
e、 预防默认值();
const errors=this.validate();
if(errors.emailErr | | errors.passwordErr){
this.setState({…errors});
}否则{
log(“要发送的数据”,this.state);
}
//如果(!err){
//axios
//.post(“http://localhost:3050/users/addUser", {
//nom:this.state.name,
//prenom:this.state.lastname,
//电子邮件:this.state.email,
//密码:this.state.password,
//电话:这个。州。电话
//     })
//。然后(res=>{
//console.log(“数据”,res.data);
//window.location.href=“/app/dashboard”;
//     });
// }
};
render(){
返回(
名字:

this.setState({name:event.target.value}) />
姓氏:
this.setState({lastname:event.target.value}) />
电邮:
this.setState({email:event.target.value,emailErr:null}) } /> { {this.state.emailErr} } 电话:
this.setState({phone:event.target.value}) />
密码:
this.setState({password:event.target.value,passwordErr:null}) } /> { {this.state.passwordErr} }
); } } 导出默认门;
我认为这几乎就是问题所在。你好,我试过了,但没有成功。。表单停止提交假数据和真数据如果我输入错误的数据,表单将不会提交,并且不会向数据库添加任何内容,但是如果输入真数据,数据将添加到数据库中,但它将保持在同一页面如果我输入错误的数据,表单将不会提交,并且不会向数据库添加任何内容。这就是你想要的,对吗?如果输入true validated,数据将被添加到数据库中,但它将保持在同一页面上。在这种情况下,,
import React, { Component } from "react";

class Gate extends Component {
  constructor() {
    super();
    this.state = {
      name: "",
      lastname: "",
      email: "",
      phone: "",
      password: "",
      emailErr: "",
      passwordErr: ""
    };
  }

  validate = () => {
    const errors = {
      emailErr: null,
      passwordErr: null
    };

    const regex2 = /^[A-Za-z]\w{7,14}$/;
    const regex1 = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;

    if (this.state.password.length > 10) {
      errors.passwordErr = "verifier votre password";
    }

    if (!regex1.test(this.state.email)) {
      errors.emailErr = "verifier votre email";
    }

    return errors;
  };

  envoyer = e => {
    e.preventDefault();

    const errors = this.validate();

    if (errors.emailErr || errors.passwordErr) {
      this.setState({ ...errors });
    } else {
      console.log("data to be send", this.state);
    }
    // if (!err) {
    //   axios
    //     .post("http://localhost:3050/users/addUser", {
    //       nom: this.state.name,
    //       prenom: this.state.lastname,
    //       email: this.state.email,
    //       password: this.state.password,
    //       phone: this.state.phone
    //     })
    //     .then(res => {
    //       console.log("data", res.data);
    //       window.location.href = "/app/dashboard";
    //     });
    // }
  };

  render() {
    return (
      <div>
        <form>
          <label for="fname">First name:</label>
          <br />
          <input
            type="text"
            id="fname"
            name="fname"
            onChange={event => this.setState({ name: event.target.value })}
          />
          <br />
          <label for="lname">Last name:</label>
          <br />
          <input
            type="text"
            id="lname"
            name="lname"
            onChange={event => this.setState({ lastname: event.target.value })}
          />
          <br />
          <label for="Email">Email:</label>
          <br />
          <input
            type="email"
            id="email"
            name="email"
            onChange={event =>
              this.setState({ email: event.target.value, emailErr: null })
            }
          />
          {
            <div style={{ fontSize: 12, color: "red" }}>
              {this.state.emailErr}
            </div>
          }
          <label for="phone">phone:</label>
          <br />
          <input
            type="text"
            id="phone"
            name="lname"
            onChange={event => this.setState({ phone: event.target.value })}
          />
          <br />
          <label for="password">password:</label>
          <br />
          <input
            type="password"
            id="password"
            name="lname"
            onChange={event =>
              this.setState({ password: event.target.value, passwordErr: null })
            }
          />
          {
            <div style={{ fontSize: 12, color: "red" }}>
              {this.state.passwordErr}
            </div>
          }
          <br />

          <input type="submit" value="Sign In" onClick={this.envoyer} />
        </form>
      </div>
    );
  }
}

export default Gate;