Получить форму сообщения со значениями ref

Я пытаюсь отправить данные с помощью этой формы:

import React, { Component } from 'react';

class ToDoForm extends Component {
    constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleSubmit(event) {
       event.preventDefault();

        fetch('http://127.0.0.1:3000/add', {
            method: 'post',
            body: {
                what: this.refs.what.value, 
                when: this.refs.when.value, 
            }
        })
    }

    render() {
        return (
            <form onSubmit = {this.handleSubmit}>
                New task : 
                <label htmlFor = "what"> Enter what</label>
                <input id = "what" ref = "what" name = "what" type = "text" required/>

                <label htmlFor = "when">Enter when</label>
                <input id = "when" ref = "when" name = "when" required/>

                <button>Send data!</button>
            </form>
        );
    }
}

export default ToDoForm;

но на стороне сервера я не могу получить req.body:

app.post('/add', (req, res) => {

    console.info(req.body);

    db.collection('task').countDocuments( (err, count) => {
        if (err) console.info(err);

        db.collection('task').insertOne({
            id : count + 1,
            what : req.body.what,
            when : req.body.when,
            done : false
        });
    });
    res.send('The \"' + req.body.what + '\" task has been added.');
});

Я почти уверен, что на этот вопрос много раз отвечали, но, полагаю, мои навыки поиска ограничены. Я готов изменить свой образ действий, если он не подходит.

Можете ли вы опубликовать дополнительную информацию о том, как вы настраиваете сервер? Вы добавили промежуточное ПО для анализа тела?

Gabriele Petrioli 01.12.2018 19:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
62
2

Ответы 2

Вам не нужны ссылки, это должно иметь значение формы:

event.target.elements.what.value
event.target.elements.when.value

Первое, что говорит refs doc, - не использовать их, если это не единственный возможный способ.

не могу, у меня все равно в ноде {} получается только console.info(req.body) :(

Falaise Solaire 01.12.2018 18:09

Перво-наперво выделите проблему. У вас проблема на стороне сервера или на стороне клиента? Проверьте на вкладке Devtools Network, что именно вы отправляете на сервер.

jorbuedo 01.12.2018 18:12

ну, на стороне клиента у меня уже были значения с refs, я изменил его на event.target.elements.what.value, как вы сказали, и он должен работать нормально, но тело на стороне сервера пусто, на вкладке `` Сеть '' много вещей, и я к нему не привык, что информация, которая вам нужна именно в этом?

Falaise Solaire 01.12.2018 18:22

Что вам нужно от сети, так это фактическое сообщение, которое вы отправляете от клиента на сервер. Там вы можете убедиться, что отправляете то, что думаете о себе.

jorbuedo 01.12.2018 18:30

Рефы создаются не так (читать https://reactjs.org/docs/refs-and-the-dom.html)

Быстрое исправление в вашем коде:

<label htmlFor = "what"> Enter what</label>
<input id = "what" ref = {el=>this.what=el} name = "what" type = "text" required/>

<label htmlFor = "when">Enter when</label>
<input id = "when" ref = {el=>this.when=el} name = "when" required/>

и использовать его как

body: {
    what: this.what.value, 
    when: this.when.value, 
}

Другой способ - использовать createRef заранее и передать его атрибуту ref.

class ToDoForm extends Component {
    constructor(props) {
        super(props);
        this.what = React.createRef();
        this.when = React.createRef();
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleSubmit(event) {
       event.preventDefault();

        fetch('http://127.0.0.1:3000/add', {
            method: 'post',
            body: {
                what: this.what.value, 
                when: this.when.value, 
            }
        })
    }

    render() {
        return (
            <form onSubmit = {this.handleSubmit}>
                New task : 
                <label htmlFor = "what"> Enter what</label>
                <input id = "what" ref = {this.what} name = "what" type = "text" required/>

                <label htmlFor = "when">Enter when</label>
                <input id = "when" ref = {this.when} name = "when" required/>

                <button>Send data!</button>
            </form>
        );
    }
}

еще пустое тело в узле console.info(req.body) :(

Falaise Solaire 01.12.2018 18:26

@FalaiseSolaire, вы удалили часть .refs из this.refs.what.value?

Gabriele Petrioli 01.12.2018 18:27

да, эта работа отлично работает на стороне клиента как на вашем, так и на моем пути, это не проблема, проблема в том, что я получаю пустую часть сервера тела.

Falaise Solaire 01.12.2018 18:29

@FalaiseSolaire, моя ошибка. Используете ли вы промежуточное ПО для анализа тела для заполнения req.body?

Gabriele Petrioli 01.12.2018 18:39

Другие вопросы по теме