React Nativeを使用してシンプルなアプリを開発しています。Androidデバイスでテストしています。リクエストをリッスンするNode.jsサーバーを作成しました。 http:// localhost:3333 / で実行されています次に、index.Android.jsからフェッチリクエストを作成しています。以下にコードを示します。
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(…)です。
これを機能させるには?
Androidデバイスには独自のIPがあるため、localhostだけでなく、fetch('http://192.168.0.2:3333/')
などのように、URLをコンピュータのIPアドレスにポイントする必要があります。
Android Debug Bridgeツール(adb)のreverseコマンドを使用します。
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にリダイレクトされます。