从laravel API获取数据以响应本机应用(使用expo创建)

时间:2020-05-17 21:45:42

标签: laravel api react-native react-native-android expo

我使用 expo 创建了一个 react native 应用,并且我正在使用expo应用或USB电缆在 android 设备上运行该应用,除了在实施身份验证之前使用 laravel APi 来测试是否一切正常之外,我还总是收到错误消息(我在fetch函数中定义了它) ,我说过可能是因为网址所致,但是当我在网络上尝试时,效果很好!我希望这个解释清楚! 我需要帮助,以将数据从laravel api获取到react native应用!

反应本地语言:

构造函数代码:

 constructor(props) {
    super(props);
    this.state = {
      email: "",
      password: "",
    };
  }

这是获取功能:

_onLoginPressed = () => {
    fetch("http://127.0.0.1:8000/api/indexp", {
      method: "GET",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
      },

    })
      .then((response) => response.json())
      .then((responseJson) => {
        console.log(responseJson);

          Alert.alert("logged");

      })
      .catch((error) => {
        console.log('erroc message');
      });
  };

博览会在以下地址(LAN)中运行: exp://192.168.1.4:19000

laravel:

在api.php中

Route::get('indexp','PostsController@indexp');

在PostsController中:

  public function indexp()
    {
        $post = Post::all();

        return response()->json($post);
    }

enter image description here

如果我安装了android studio并在模拟器上运行它,也许可以使用?

2 个答案:

答案 0 :(得分:1)

您的问题出在提取请求上。您需要访问API服务器的IP,在这种情况下,是您PC的LAN地址(在Linux上运行ifconfig或在Windows中运行ipconfig)。 然后,您必须以该IP作为主机启动Web服务器,并根据需要设置端口,即 php artisan服务--host 192.168.10.100 --port 8000 ,其中IP是您的PC的IP,端口是您想要的IP。

然后,在您的提取请求上,您必须进入 http://192.168.10.100:8000/api/indexp 并从那里获取结果。 我建议不要在每个文件上获取IP和端口,而是将它们放在配置文件中,这样,如果您需要更改它们,只需在一个地方更改

答案 1 :(得分:0)

就像“julix”所说的,问题出在 URL、expo 或 react native 应用程序无法识别 http 请求 localhost 而是使用您的 ip 地址,laravel 手动将服务器主机从默认 127.0.0.1 设置为 192.168.0.1 (您的 IP 地址),端口为 8000