React Native Fetch локально не работает с API laravel - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь получить локальный API-интерфейс laravel в реакции-нативном. Когда я пытаюсь использовать удаленный URL-адрес, он работает, но не работает с локальным сервером. Я использую эмулятор Android Studio и

react-native => 0.59.8, 
laravel => 5.7

Мой код

 async submit() {

    //https://facebook.github.io/react-native/movies.json => this works

    try {
        let response = await fetch('localhost:8000/api/coins');
        let responseJsonData = await response.json();
        console.log(responseJsonData, 'data');
    } catch (e) {
        console.log(e, 'error')
    }
};

Error

05-20 14:46:08.167  4749  8885 I ReactNativeJS: { [TypeError: Network request failed]
05-20 14:46:08.167  4749  8885 I ReactNativeJS:   line: 24115,
05-20 14:46:08.167  4749  8885 I ReactNativeJS:   column: 31,
05-20 14:46:08.167  4749  8885 I ReactNativeJS:   sourceURL: 'http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false' }, 'error'

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Это может быть проблемой

iOS работает в симуляторе, а Android работает в эмуляторе.

В вашем localhost:8000/api/coins localhost указывает на среду, в которойкод работает.

Эмулятор эмулирует реальное устройство, в то время как симулятор только имитирует устройство.Так что localhost на Android указывает на эмулируемое устройство Android.А не к машине, на которой работает ваш сервер.

Решение Решением является замена localhost на IP-адрес вашего компьютера.(Например, 192.168.1.22)

0 голосов
/ 20 мая 2019

Для iOS вы должны установить исключение домена:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <false/>
  <key>NSExceptionDomains</key>
  <dict>
    <key>cocoacasts.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

или разрешить весь домен:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
...