Неопределенные значения передаются в MySQL базу данных через React и Node.js - PullRequest
0 голосов
/ 07 мая 2020

Мой интерфейс в React продолжает передавать неопределенные значения внутреннему серверу в Node. Я пытаюсь создать контейнер регистрации, который создаст учетную запись в базе данных.

Вот моя функция по щелчку:

register(event) {
        event.preventDefault();

        let newUser = {
          name : this.state.name,
          password : this.state.password,
          email : this.state.email
        }
        Axios.post('http://localhost:2999/Join', newUser).then((response) => {
            console.log(response.data);

            if (response.data.success) {
                console.log("Successful Register");
                this.props.close();
            } else {
                console.log("Failed to Register");
                console.log(response.data.error);
            }
        });
    }

В настоящее время у меня есть настройка, где состояние каждого поля в форме обновляется через функцию onChange:

handleNameChange(event) {
        this.setState({name : event.target.value});
    }

    handlePwChange(event) {
      this.setState({password : event.target.value});
    }

    handleEmailChange(event) {
      this.setState({email : event.target.value});
    }

Вот функция POST на моем сервере. js:

app.post('/Join', (req, res) => {
    const name = req.params.name;
    console.log(name);
    const password = req.params.password;
    console.log(password);
    const email = req.params.email;
    console.log(email);
    const REGISTER_USER_QUERY = `INSERT INTO users (name, password, email) VALUES ('${name}', '${password}', '${email}');`;
    connection.query(REGISTER_USER_QUERY, (err, results) => {
        if (err) {
            return res.send(err);
        } else {
            return res.send('Successfully registered player');
        }
    });
});

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вы должны использовать данные из req.body. Поэтому в вашем коде просто нужно изменить:

app.post('/Join', (req, res) => {
    const name = req.body.name;
    console.log(name);
    const password = req.body.password;
    console.log(password);
    const email = req.body.email;
    console.log(email);
    const REGISTER_USER_QUERY = `INSERT INTO users (name, password, email) VALUES ('${name}', '${password}', '${email}');`;
        connection.query(REGISTER_USER_QUERY, (err, results) => {
        if (err) {
           return res.send(err);
        } else {
           return res.send('Successfully registered player');
      }
  });
});

Вы должны использовать req.params при передаче параметров из url. Предположим, вы хотите получить данные от пользователя с идентификатором 1000.

Ваш маршрут будет:

app.get('/user/:id', (req, res) => {
    const id = req.params.id
    res.json({userid: id})
})

В приведенном выше примере, если вы сделаете запрос на маршруте http://localhost: 3000 / пользователь / 1000

У нас есть ответ:

{userid: 1000}
0 голосов
/ 07 мая 2020

как вы вызываете каждый «handleChange» во входных данных?

вы должны делать это:

handleNameChange = event => this.setState({name: event.target.value})

<input value={this.state.name} onChange={this.handleNameChange} />

Проверьте две вещи: что вы вызываете нормально onChange из ввода и что вы используете стрелочную функцию в handleNameChange ИЛИ выполняете привязку к handleNameChange в конструкторе компонента вашего класса.

...