Невозможно получить данные из dong реагировать на монго - PullRequest
0 голосов
/ 04 января 2019

Я новичок в React Native и только что выяснил, как настроить локальный сервер и базу данных для моего собственного приложения.Я использую экспресс и mongodb.Мой сервер и Mongo работают на моем бэкэнде, и я пытаюсь сделать вызов axios, чтобы получить данные из моей базы данных, но массив возвращается пустым, а ответ от данных не определен.Я проверил конечные точки на почтальоне, и конечные точки в порядке.Вот пример моего запроса api axios и компонента, в который я пытаюсь вернуть данные. Спасибо заранее за вашу помощь!Также, если вы хотите увидеть любой другой код, дайте мне знать, и я опубликую его.

// api.js

import axios from "axios";

    export const getAllTweets = async () => {
      await axios
        .get("http://(my ip address):(port number)/api/tweet")
        .then(response => {
          console.log("response: ", response);
          return response.data;
        })
        .catch(error => {
          console.log("There are no tweets to get!", error);
        });
    };


//HomeScreen.js

import React from 'react';
import {
  Image,
  Platform,
  ScrollView,
  StyleSheet,
  Text,
  TouchableOpacity,
  View,
} from 'react-native';
import { WebBrowser } from 'expo';

import { getAllTweets } from '../constants/api';

import { MonoText } from '../components/StyledText';

export default class HomeScreen extends React.Component {
  static navigationOptions = {
    header: null,
  };
  static defaultProps = {
    getAllTweets
  };
  state = {
    tweets: [],
    isLoading: false
  }

  async componentDidMount() {
    this.setState({ isLoading: true });
    let data = await this.props.getAllTweets();
    console.log('data: ', data);
    try {
      this.setState({ isLoading: false, tweets: data });
    } catch (error) {
      console.log(error, "Cannot get tweets in cdm");
    }
  }

  render() {
    console.log("this.state.tweets", this.state.tweets); <--- this is empty
    return (
      <View style={styles.container}>

      </View>
    );
  }

  _maybeRenderDevelopmentModeWarning() {
    if (__DEV__) {
      const learnMoreButton = (
        <Text onPress={this._handleLearnMorePress} style={styles.helpLinkText}>
          Learn more
        </Text>
      );

      return (
        <Text style={styles.developmentModeText}>
          Development mode is enabled, your app will be slower but you can use useful development
          tools. {learnMoreButton}
        </Text>
      );
    } else {
      return (
        <Text style={styles.developmentModeText}>
          You are not in development mode, your app will run at full speed.
        </Text>
      );
    }
  }

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Я нашел свой ответ.Запрос не пришел со стандартным IP-адресом.Зайдя в системные настройки => сеть => TCP / IP (вкладка) и используя IP-адрес IPv4, вы устранили проблему.Он также работает, предоставляя ему IP-адрес виртуального маршрутизатора 10.0.2.2, на котором работает эмулятор.

0 голосов
/ 04 января 2019

Похоже, вы смешиваете два разных способа вызова асинхронных функций.Либо вы должны использовать async/await, либо цепочку обещаний.Вы бы не сделали оба.

Если вы измените функцию getAllTweets на что-то вроде этого.

export const getAllTweets = async () => {
  // you need a try/catch as the await function can throw
  try {
    let response = await axios.get("http://(my ip address):(port number)/api/tweet");
    console.log("response: ", response);
    return response.data;
  } catch (error) {
    console.warn(error)
    return [];
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...