Я пытаюсь отправить данные с помощью этой формы:
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.');
});
Я почти уверен, что на этот вопрос много раз отвечали, но, полагаю, мои навыки поиска ограничены. Я готов изменить свой образ действий, если он не подходит.





Вам не нужны ссылки, это должно иметь значение формы:
event.target.elements.what.value
event.target.elements.when.value
Первое, что говорит refs doc, - не использовать их, если это не единственный возможный способ.
не могу, у меня все равно в ноде {} получается только console.info(req.body) :(
Перво-наперво выделите проблему. У вас проблема на стороне сервера или на стороне клиента? Проверьте на вкладке Devtools Network, что именно вы отправляете на сервер.
ну, на стороне клиента у меня уже были значения с refs, я изменил его на event.target.elements.what.value, как вы сказали, и он должен работать нормально, но тело на стороне сервера пусто, на вкладке `` Сеть '' много вещей, и я к нему не привык, что информация, которая вам нужна именно в этом?
Что вам нужно от сети, так это фактическое сообщение, которое вы отправляете от клиента на сервер. Там вы можете убедиться, что отправляете то, что думаете о себе.
Рефы создаются не так (читать 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) :(
@FalaiseSolaire, вы удалили часть .refs из this.refs.what.value?
да, эта работа отлично работает на стороне клиента как на вашем, так и на моем пути, это не проблема, проблема в том, что я получаю пустую часть сервера тела.
@FalaiseSolaire, моя ошибка. Используете ли вы промежуточное ПО для анализа тела для заполнения req.body?
Можете ли вы опубликовать дополнительную информацию о том, как вы настраиваете сервер? Вы добавили промежуточное ПО для анализа тела?