Как использовать Redux для отправки данных на серверную часть (и, следовательно, MongoDB)?

#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. Я не знал, это было отредактировано, спасибо!