Как я могу передать мои данные mongodb в состояние реакции

У меня есть приложение для реагирования, которое просто извлекает данные из api. Вместо api я решил использовать mongodb и вместо этого создал простой db с Express в качестве инструмента для сервера.

Если я буду использовать только экспресс, я могу просто сделать две вещи: 1. создать маршрут, на котором я могу отображать все данные 2. Создайте страницу ejs, где я могу показать все данные.

app.get('/cats', function(req, res){
  cat.find({}, function(err, allCats){
    if (err){
      console.info(err);
    } else {
      res.render('cats', {cats: allCats});
    }
  })
});

А затем из файла EJS:

<% cats.forEach(cat => { %>
  <h4><%= cat.title %></h4>
  <h5><%= cat.breed %></h5>
<% }); %>

Теперь вместо того, чтобы бросать эти данные в файл / представления ejs, мне нужно передать данные моему приложению для реагирования, чтобы оно могло обработать рендеринг за меня:

class App extends Component{
 constructor(props){
   super(props);

   this.state = { 
     cats: [],
   };
   this.catSearch('meow');
 }

 catSearch(term){
   getCats(term, API_KEY, (cats) => {
     this.setState({ 
       cats: cats,
     });
   });
 }

 render(){
   const catSearch = _.debounce((term) => { this.catSearch(term) }, 300);

   return (
     <div>
       <SearchBar onSearchTermChange = {catSearch}/>
       <CatList  cats = { this.state.cats }/>
     </div>
   );
 }
};

Примечание: здесь я использовал вспомогательную функцию для получения данных api, но здесь это не так, поскольку мне не нужно извлекать данные из api, а вместо этого мне нужно извлекать данные из базы данных mongodb.

Любая идея, как я могу передать данные из express в мой файл реакции, чтобы он мог обрабатывать рендеринг?

Нужно ли мне включать некоторые файлы в мой файл реакции, чтобы я мог запрашивать базу данных? Заранее спасибо. Некоторое время думал об этом, но не повезло.

какая-то конкретная причина, по которой вы не хотите пробовать вызов API?

RIYAJ KHAN 30.03.2018 06:42

Я планирую использовать полный стек MERN.

user6398538 30.03.2018 06:48

с mern вы можете вызвать. Плохо визуализировать страницу с данными

RIYAJ KHAN 30.03.2018 07:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
1 660
1

Ответы 1

В MERN запросы React отправляются на экспресс-сервер, который запрашивает в базе данных необходимые данные. Затем данные извлекаются экспрессом и возвращаются в веб-приложение React.

Создайте экспресс-сервер, который будет получать имена всех кошек из MongoDB и возвращать их в веб-приложение ReactJS. Вы можете использовать Мангуста для получения данных из MongoDB.

У вас должен быть метод componentDidMount() внутри класса и поместить в него вызов api, чтобы получить имена. Затем вам нужно обновить состояние (setState) с помощью ответа, полученного от api.

я сделал это: componentDidMount() { console.info('i got here..') fetch('/cats') .then(response => response.json()) .then(data => this.setState({ cats: data })); }

user6398538 30.03.2018 09:37

Но в итоге не вышло. и вылезла ошибка Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

user6398538 30.03.2018 09:38

Это какая-то ошибка с JSON, попробуйте componentDidMount() { console.info('i got here..') fetch('/cats') .then(response => console.info(response)) и проверьте, получаете ли вы ответ

illiteratewriter 30.03.2018 09:55
prntscr.com/iye6kk вот что у меня есть. Таким образом, здесь работают два отдельных сервера. localhost: 8080 для webpack / response и localhost: 3000 для экспресс.
user6398538 30.03.2018 10:10

можно вместо console.info(response) сделать console.info(response.body)? Это может быть тот ответ, который вам нужен

illiteratewriter 30.03.2018 11:09

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