Не удается отправить запрос с React Native и Axios - PullRequest
0 голосов
/ 22 ноября 2018

Я прочитал десятки ответов, и я не могу понять это:

  • Запрос отлично работает в iOS, но не работает вAndroid
  • Я использую React Native 0.57.5 и axios 0.18.0
  • Я поставил некоторые записи через
axios.interceptors.request.use(request => {
  console.log('Starting Request', request)
  return request
})

axios.interceptors.response.use(response => {
  console.log('Response:', response)
  return response
})

enter image description here

Как видно, запрос выглядит нормально.И это не к localhost, а к действующему работающему серверу (я отредактировал некоторые внутренние ключи заголовка и полные URL)

  • Также поместите оператор журнала в catch того места, где я делаю свойзапрос axios:
axios.request(config)
      .then((axiosResponse) => {
        console.log('GOOD RESPONSE ', axiosResponse)

        // some logic 
      })
      .catch((error) => {
        console.log('axiosResponse ERROR', error)
        // some other logic
      })

И вот что я вижу в консоли отладчика chrome:

axiosResponse ERROR Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:87)
    at XMLHttpRequest.dispatchEvent (event-target.js:172)
    at XMLHttpRequest.setReadyState (XMLHttpRequest.js:580)
    at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:394)
    at XMLHttpRequest.js:507
    at RCTDeviceEventEmitter.emit (EventEmitter.js:190)
    at MessageQueue.__callFunction (MessageQueue.js:349)
    at MessageQueue.js:106
    at MessageQueue.__guard (MessageQueue.js:297)
    at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105)
    at debuggerWorker.js:72

Эточасть моего апгрейда с React Native 0.55.0 до 0.57.5, так что раньше эта аксиальная штука работала нормально.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Чтобы решить эту проблему, вам нужно добавить домен API в ваш файл response_native_config.xml, как показано ниже:

Печать в Android Studio

<?xml version="1.0" encoding="utf-8"?>
 <network-security-config>
  <domain-config cleartextTrafficPermitted="true">
   <domain includeSubdomains="false">localhost</domain>
   <domain includeSubdomains="false">10.0.2.2</domain>
   <domain includeSubdomains="false">10.0.3.2</domain>
   <domain includeSubdomains="false">192.168.0.9</domain>
 </domain-config>
</network-security-config>
0 голосов
/ 22 ноября 2018

Для того, что вы сказали, я думаю, что вы, должно быть, не просили разрешения на доступ в Интернет, если вам нужно отредактировать в вашем проекте Android внутри, реагируйте на файл манифеста, это должно быть в $ your_project_root_directory / android / app /src / main / AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package"
    android:versionCode="1"
    android:versionName="1.0">
...
    <uses-permission android:name="android.permission.INTERNET" />
...
</manifest>

Другое, что может быть, если вы используете http-соединение.попробуйте следующее

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">yourinsecureserver.com</domain>
    </domain-config>
</network-security-config>

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

https://android -developers.googleblog.com / 2018/04 / protection-users-with-tls-by-default-in.html

...