#node.js #reactjs #mongodb #redux #react-fullstack
Вопрос:
Недавно я создал простое приложение MERN, которое должно использовать форму для отправки данных в серверную часть с помощью Redux для управления состоянием. Я новичок в Redux (как вы увидите в моем коде), и я считаю, что, должно быть, я испортил диспетчеризацию.
Ниже приведены функции в компоненте моей формы:
const [landlordData, setLandlordData] = useState({name: '', type: '', rating: '', details: ''}); const dispatch = useDispatch(); const handleSubmit = (e) =gt; { e.preventDefault(); console.log(landlordData); dispatch(createLandlord(landlordData)); }
Какая консоль обычно регистрирует данные из формы. Когда я отправляю, хотя новая запись в MongoDB включает только созданное время и идентификатор UUID записи из-за схемы базы данных:
import mongoose from 'mongoose'; const landlordSchema = mongoose.Schema({ name: String, type: String, rating: Number, details: String, createdAt: { type: Date, default: new Date() } }); var landlordDetails = mongoose.model('Landlords', landlordSchema); export default landlordDetails;
Чтобы предоставить больше контекста для внутренних операций, вот сценарий контроллера, который я создал:
import landlordDetails from '../models/landlords.js'; export const getLandlords = async (req, res) =gt; { try { const getDetails = await landlordDetails.find(); console.log(getDetails); res.status(200).json(getDetails); } catch (error) { res.status(404).json({ message: error.message }); } } export const createLandlords = async (req, res) =gt; { const details = req.body; const newLandlord = new landlordDetails(details); try { await newLandlord.save(); res.status(201).json(newLandlord); console.log("New landlord added!"); } catch (error) { res.status(409).json({ message: error.message }) } }
Пожалуйста, дайте мне знать, если потребуется дополнительная информация или я совершенно не обращаю внимания на что-то очевидное. Спасибо.
РЕДАКТИРОВАТЬ: Чтобы предоставить больше контекста, вот мои вызовы api и мой сценарий действий:
API:
import axios from 'axios'; const url = 'http://localhost:5000/landlords'; export const fetchLandlords = () =gt; axios.get(url); export const createLandlord = (landlordData) =gt; axios.post(url, landlordData);
Действия JS файл:
import * as api from '../api/index.js'; //Action creators export const getLandlords = () =gt; async (dispatch) =gt; { try { const { data } = await api.fetchLandlords(); dispatch({ type: 'FETCH_ALL', payload: data }); } catch (error) { console.log(error.message); } }; export const createLandlord = (landlord) =gt; async (dispatch) =gt; { try { const { data } = await api.createLandlord(landlord); dispatch({ type: 'CREATE', payload: data }); } catch (error){ console.log(error); } };
Когда я нажимаю кнопку отправить, создается новая запись в базе данных с полем createdAt, но больше ничего.
Комментарии:
1. Если я правильно понял, вы используете redux thunk для передачи асинхронной функции. могу ли я увидеть функцию landlordDetails, как вы вызываете api
2. Здравствуйте, спасибо за ответ! landlordDetails-это просто var-имя схемы мангуста, которую я создал для подключения MongoDB. Вот файл отвечает на мои вызовы API: импорт Вардар из «Аксиос»‘; константные URL-адрес = ‘ локальный:5000/помещики ‘; экспорт константные fetchLandlords = () = gt; «Аксиос».получить(URL-адрес); экспорт константные createLandlord = (landlordData) = gt; «Аксиос».пост(адрес, landlordData);
3. Это вызывается из моего сценария действий: Это вызывается из моего сценария действий: импорт * как api из ‘../api/index.js»; экспорт const createLandlord = (арендодатель) =gt; асинхронный (отправка) =gt;gt; { попробуйте { const { данные } = ожидание api.createLandlord(арендодатель); отправка({ тип: «СОЗДАТЬ», полезная нагрузка: данные }); } поймать (ошибка){ console.log(ошибка); } };
4. @TarekElShennawy Вам нужно отредактировать свой ответ с помощью этих фрагментов, код не читается здесь, в комментариях.
5. Я не знал, это было отредактировано, спасибо!