2016-10-16 11 views
3

私はexpress + node jsで認証システムを実装しようとしています。これまでは良いことでしたが、今はページを更新してもフォームがサーバーに送信されることがわかりました。これは私のコードがどのように見えるかです:条件が真である場合にのみフォームを送信する方法

クライアント側:

submit(e) { 
    let data = this.state; /// object with user's informations 
    e.preventDefault() 
    validate.form(this.state.username, this.state.email, this.state.password, this.state.confirm) // this returns true if everything is fine or returns the error string! 

} 

render() { 
    return (<div> 
     <form action="/login" onSubmit = {this.submit} method="post"> 
      <p>Username:</p> 
      <input type="text" onChange = {this.getData} name="username" value = {this.state.username} /> 
      <p>Email</p> 
      <input type="text" onChange={this.getData} name = "email" value = {this.state.email} /> 
      <p>Password</p> 
      <input type="text" onChange={this.getData} name = "password" value = {this.state.password} /> 
      <p>Confirm Password</p> 
      <input type="text" onChange={this.getData} name = "confirm" value = {this.state.confirm} /> 
      <br/> <br/> 
      <input type="Submit" value='Submit' /> ///this is not working! 
     </form> 
    </div>) 
} 

サーバー側:

app.post('/login',(req, res) => { 
    console.log(req.body) 
    res.sendFile(__dirname + '/src/index.html') 
    db.query('INSERT INTO users SET ?', req.body, (err, res) => console.log("done!")) 

}) 

TL; DR私だけvalidate.form(ユーザ名場合はフォームを送信するために探しています、email、password、confirm)はtrueを返します。私はjsonを解析するモジュールとしてbodyParserを使用しています!

+0

の 'addEventListener' – adeneo

+0

可能な重複して適切なイベントハンドラを使用して、関数' submit'に名前を付け、またそのような形で、 'this.submit'を使用しないでくださいhttp://stackoverflow.com/questions/ 5651933/what-is-the-against-evt-preventdefault – leroydev

答えて

0

form.validate()が同期していると仮定すると、form.validate()がエラー文字列を返す場合にのみpreventDefaultを呼び出す必要があります。

submitForm(e) { // avoid to use 'submit' as method name 

    let data = this.state; /// object with user's informations 
    let formValid = validate.form(this.state.username, this.state.email, this.state.password, this.state.confirm); 

    if(formValid !== true) { 
     e.preventDefault() 
    } 

    // else, if formValid is true, the default behaviour will be executed. 
} 
+0

今、私はテストするのが家ではありませんが、これは動作するはずです。その間に私はいくつかの変更を加えました。私はサーバ側で検証メソッドを使うつもりだと思っています。 –

関連する問題