React Native:获取请求失败并出现错误 - TypeError:网络请求失败(...)

IT技术 android node.js express reactjs react-native
2021-05-12 07:15:25

我正在使用 React Native 开发一个简单的应用程序。我正在 Android 设备上测试它。我创建了一个 Node.js 服务器来监听请求,它在http://localhost:3333/ 上运行接下来,我要从 index.android.js 发出一个 fetch 请求。下面是代码。

fetch('http://localhost:3333/', 
        {
            'method': 'GET',
            'headers': {
                'Accept': 'text/plain',                                     
            }
        }       
    ) 
.then((response) => response.text()) 
.then((responseText) => {
    console.log(responseText);  
}) 
.catch((error) => {
    console.warn(error);
}); 

节点服务器上的请求处理程序的代码如下

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
}); 
app.use(express.static('public'));
app.get('/', function(req, res){ 
    console.log('Request received for /');
    res.send("this is the response from the server");
    res.end();
});

但是,获取请求不起作用。我在 Chrome 控制台中得到的错误是:TypeError: Network request failed(...)。

如何使这项工作?

2个回答

由于您的 Android 设备有自己的 IP,您需要将 URL 指向您计算机的 IP 地址,而不仅仅是 localhost。例如fetch('http://192.168.0.2:3333/')

使用Android调试桥工具(adb)反向命令:

adb reverse <remote> <local> - reverse socket connections.
                               reverse specs are one of:
                                 tcp:<port>
                                 localabstract:<unix domain socket name>
                                 localreserved:<unix domain socket name>
                                 localfilesystem:<unix domain socket name>

例如:

adb reverse tcp:3333 tcp:3333

localhost:3333可以从您的设备访问。您还可以使用不同的端口。例如:

adb reverse tcp:8081 tcp:3333

这会将设备端口 8081 重定向到本地端口 3333。