#javascript #reactjs #mongodb #express
#javascript #reactjs #mongodb #экспресс
Вопрос:
У меня есть форма, в которой я хотел бы иметь возможность публиковать ее содержимое на моем сервере MongoDB, который я подключил к серверной части, однако, когда я публикую сообщение, я получаю сообщение об ошибке «Ошибка проверки сообщений: ошибка post: приведение к строке для значения «{}» в пути «post», и у меня естьпонятия не имею, почему. Я только начал с react, поэтому простите меня, если решение простое.
Это моя страница формы:
import React from 'react';
import axios from 'axios';
export default class PostList extends React.Component {
state = {
post: '',
}
handleChange = event => {
this.setState({ post: event.target.value });
}
handleSubmit = event => {
event.preventDefault();
const post = {
post: this.state.name
};
axios.post('http://localhost:5000/posts', { post })
.then(res => {
console.log(res);
console.log(res.data);
})
}
render() {
return (
<div className="flex-container-home">
<div className="app">
<form onSubmit={this.handleSubmit}>
<label>
Post:
<input type="text" name="post" onChange={this.handleChange} />
</label>
<button type="submit">Add</button>
</form>
</div>
</div>
)
}
}
Это мой маршрутизатор:
const express = require("express")
const router = express.Router()
const Post = require('../models/posts')
router.post('/', async (req, res) => {
const post = new Post({
post: req.body.post,
});
try {
const savedPost = await post.save()
res.json(savedPost);
} catch (err) {
res.json({ message: err });
}
})
module.exports = router;
Это моя схема:
const mongoose = require('mongoose');
const PostSchema = mongoose.Schema({
post: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
})
module.exports = mongoose.model('Posts', PostSchema)
Комментарии:
1. Я не знаю, является ли это источником проблемы, но вам нужно передать параметр конфигурации в запрос post axios, например
axios.post(url, data, config)
, где config может быть определен какlet config={headers:{"Content-Type":"application/json"}}
.2. Я только что добавил это, но моя проблема все еще существует. Спасибо, хотя @BlackMath
Ответ №1:
Заменить { post }
на post
, { post }
даст
{
post: {
post: this.state.name
}
}
Ожидаемый может быть
{
post: this.state.name
}
Комментарии:
1. Я заменил его на это, но получил сообщение об ошибке «Ошибка проверки сообщений: требуется post: Path
post
«.2. когда я использую postman, я могу правильно отправить сообщение в свою базу данных, поэтому я думаю, что оно получает его правильно. Извините, если я не отвечаю на ваш вопрос так, как вы намеревались
3. проверьте вкладку «Сеть» в браузере, какие данные она публикует
4. есть 2 сообщения. Первое сообщение, когда я нажимаю на него, говорит, что не удалось загрузить данные ответа. Второе сообщение гласит: » сообщение: {ошибки: {сообщение: {имя: «Ошибка проверки», сообщение: »
post
Требуется путь.»,…}},…}} »5. Его ответ, проверьте тело вашего запроса