No se pueden enviar solicitudes HTTP a Localhost Backend desde la apli

No se pueden enviar solicitudes HTTP a Localhost Backend desde la aplicación React Native Mobile

¡Primer día de 2022~! Aprender a desarrollar aplicaciones móviles está dando dolores de cabeza. No puede ser tan difícil de configurar. Ya he perdido 6 horas. ¡Por favor ayuda!

Situación Mi entorno de desarrollo se ejecuta en Ubuntu a través de VMWare alojado en Windows 10. Dentro de este entorno tengo:

  • una API back-end Node/express que se ejecuta en localhost que funciona bien cuando se prueba con Postman/navegador
  • una aplicación nativa de reacción predeterminada creada y ejecutada a través de Expo. Pruebo esta aplicación desde mi teléfono Android leyendo el código QR que proporciona Expo/metro, servido a través de Tunnel

Comportamiento deseado:

  • la aplicación móvil React Native debería poder comunicarse con la API de back-end

Error:

Network Error
at node_modules/axios/lib/core/createError.js:15:17 in createError
at node_modules/axios/lib/adapters/xhr.js:114:22 in handleError
at node_modules/react-native/Libraries/Network/XMLHttpRequest.js:609:10 in setReadyState
at node_modules/react-native/Libraries/Network/XMLHttpRequest.js:396:6 in __didCompleteResponse
at node_modules/react-native/Libraries/vendor/emitter/_EventEmitter.js:135:10 in EventEmitter#emit

Solicitud de publicación de Axios de React Native (abreviado)

axios.post('http://localhost:5000/user/login', some-data)

Intentos de resolución

  • reemplazó 'localhost' con variaciones de 10.0.2.2 y 127*
  • conectando a través de Expos (LAN o local en lugar de túnel) pero no se pudo conectar (error de tiempo de espera)
  • jugar con la configuración del cortafuegos ufw de Ubuntu (deshabilitar, permitir puerto)
  • Ignorarlo todo al instalar Android Studio para emular, pero me dijeron que mi dispositivo no es compatible con SVM o la virtualización de hardware at-x, lo que me llevó a otra madriguera de conejo
Mostrar la mejor respuesta

use una IP local como 192.xxx.xx.xx que resolverá el problema que localhost no funcionará

Parece que no tengo una ip 192.XX en mi Ubuntu. Es un sistema operativo invitado a través de VMWare. Solo 192 que usé es un DNS pero sigue siendo un error

Entonces me doy cuenta de lo que hice mal.

Cuando ejecuté adb reverse, usé los puertos que se usaron en los tutoriales y las preguntas de stackfoverflow (porque muchas veces estos son los predeterminados). Pero debe usar el puerto donde escucha su API de back-end.

Para cualquier otra persona atascada, la guía completa es: Si su API de back-end está escuchando en 'localhost: 5000' y si su aplicación nativa de reacción se ejecuta a través de la exposición en Local (dirá que Metro está escuchando en 127 * en la terminal, o 10 * si está configurado en LAN) Luego, en la solicitud de API, reemplace localhost con la IP enumerada en la exposición anterior (127 o 10) Y en la terminal 'adb reverse tcp:5000 tcp:5000'

En Resumen:

  1. adb invierte el puerto en el que está escuchando su API de back-end
  2. cambie localhost por la ip listada por Metro en la terminal cuando comience a reaccionar nativo con expo