Jestem naprawdę nowy w reagowaniu. Stworzyłem prosty formularz z bootstrapem.

My Form with two textboxes for first and last name and a submit button and a reset button

Stworzyłem bazę danych MySQL. Skonfigurowałem serwer ekspresowy na porcie 3001 i udało mi się przesłać dane mojego formularza do bazy danych.

Teraz próbuję wysłać id za pośrednictwem formularza i uzyskać szczegółowe informacje. Czy ktoś może mnie przez to przeprowadzić. Przeszukałem Internet, ale nie mogłem jeszcze znaleźć jasnego przykładu.

Z góry dziękuję

Moja aplikacja.js:

import React, { Component } from "react";
import "bootstrap/dist/css/bootstrap.css";
import "./App.css";
import axios from "axios";
import { Form } from "react-bootstrap";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      id: "",
      fName: "",
      lName: "",
      password: "",
      email: "",
      persons: [],
    };
  }

  handleOnSubmit(event) {
    event.preventDefault();
    alert("Data Submitted Successfully");

//--------------------------------------------------------------------------------
//POST Request

// const user = {
//   fName : this.state.fName,
//   lName : this.state.lName,
//   // email : this.state.email,
//   // password : this.state.password,
// };

// axios.post(`http://localhost:3001`, { user })
// .then(res => {
//   console.log(res);
//   console.log(res.data);
// })
  }

handleOnChange(event) {
    let name = event.target.name;
    let value = event.target.value;
    this.setState({
      [name]: value
    });
  }

  //GET Request

  handleOnSearch() {
    axios.get(`http://localhost:3001`,{
      params: {
        id: this.state.id
      }
    })
      .then(res => {
        console.log(this.state.persons);
        this.setState({ persons: res.data });
      });
  }

  render() {
    return (
      <div>
        <Form onSubmit={this.handleOnSubmit.bind(this)}>
          <Form.Group controlId="firstName">
            <Form.Label>First Name</Form.Label>
            <Form.Control
              type="text"
              placeholder="Enter first name"
              name="fName"
              onChange={this.handleOnChange.bind(this)}
            />
          </Form.Group>
      <Form.Group controlId="lastName">
        <Form.Label>Last Name</Form.Label>
        <Form.Control
          type="text"
          placeholder="Enter last name"
          name="lName"
          onChange={this.handleOnChange.bind(this)}
        />
      </Form.Group>


      <div>
        <button
          variant="primary"
          type="submit"
          className="btn btn-primary mx-1"
        >
          Submit
        </button>
        <button variant="primary" type="reset" className="btn btn-warning">
          Clear
        </button>
      </div>
      <hr />
      <br />
      <div>
        <Form.Group controlId="id">
          <Form.Label>Id</Form.Label>
          <Form.Control
            type="text"
            placeholder="Enter id"
            name="id"
            onChange={this.handleOnChange.bind(this)}
          />
        </Form.Group>

        <button variant="primary" className="btn btn-warning mx-1" onClick={this.handleOnSearch.bind(this)}>
          Search
      </button>
      </div>
    </Form>
  </div>
    );
  }
}

export default App;

Mój server.js:

// Creating the express app
var express = require('express');
var app = express();

// Getting mysql database access
var mysql = require('mysql');

// Enabling support to the Cross-Origin Resource Sharing protocol
var cors = require('cors');
app.use(cors());

// Extracting the body of the req to expose it on command
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// Writing connection details
var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'reactmysql'
})

// Connecting to the database
con.connect((err) => {
    if (err) {
        console.log("There was an error connecting to the database: " + err);
    }
    console.log("Connected to the database");
})

// Starting listening on port 3001
app.listen(3001, () => {
    console.log("I am listening on port 3001");
})

// Getting the data from the body whenever user inputs them and assigning them to backend variables
app.post('/', (req, res) => {
    // var fName = req.body.user.fName
    // var lName = req.body.user.lName
    console.log(req);
    console.log(res);
    // var sql = "INSERT INTO ('firstname', 'lastname') VALUES ('" + fName + "', '" + lName + "')"
    var sql = "SELECT * FROM `mytable`";
    con.query(sql, (err, result) => {
    if (err) {
        console.log("There was an error in your query: " + err);
    }
    console.log("Query Executed Successfully");
    console.log(result)
    })
})

Final Form (with a text field for id and a search button)

0
Thisura 17 grudzień 2019, 08:59

2 odpowiedzi

Dodaj hosta ekspresowego do pliku package.json aplikacji reaguj "proxy": "http://localhost:3001/"

App.js

//GET Request

  handleOnSearch() {
    axios.get(`/${this.state.id}`
    })
      .then(res => {
        console.log(this.state.persons);
        this.setState({ persons: res.data });
      });
  }

Server.js

app.get('/:id', (req, res) => {
    const id = req.params.id;
    //Rest of the code

})




edytuj
Możesz spróbować tego ze swoim starym kodem

W app.js dodaj PreventDefault()

handleOnSearch(event) {
    event.preventDefault();
    axios
      .get(`http://localhost:3001`, {
        params: {
            id: this.state.id,
        },
      })
      .then((res) => {
        console.log(this.state.persons);
        this.setState({ persons: res.data });
      });
  }

server.js

app.get('/', (req, res) => {
  const id = req.query.id;
  //Rest of the code

})
2
NoOne 8 styczeń 2020, 09:16
Dzięki za odpowiedź. Ale kod nie działał. Pojawiły się dwa błędy konsoli: „VM76:1 GET localhost:3000/3 404 (nie znaleziono)” i „ createError.js:16 Nieprzechwycony (w obietnicy) Błąd: Żądanie nie powiodło się z kodem stanu 404 przy createError (createError.js:16) przy rozliczeniu (settle.js:17) przy XMLHttpRequest.handleLoad (xhr.js:59)"
 – 
Thisura
18 grudzień 2019, 07:02
Wyszukałem w Google błędy i przeczytałem odpowiedzi na github i stackoverflow. Ale nie mogłem nic z nich wyciągnąć.
 – 
Thisura
18 grudzień 2019, 07:04

Używaj tego przy wszystkich czynnościach.

axios.get('/:id', {
params: {
}
  })
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
  })
.finally(function () {
// always executed
}); 
1
Rahul Gupta 17 grudzień 2019, 09:54