反应本机表单请求

React Native Form request

我正在尝试从 Android 模拟器发送简单的 POST Forms React Native Fetch 请求NodeJS 服务器。 NodeJS 服务器没有检测到这一点(它通过使用 Postman api 工作)。请帮助我:)

Server.js:

var express = require('express');
var app = express();

var accs = [];

var server = app.listen(8082, function () {
   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port)
})

app.post('/register', function(req, res) {
  console.log("here");
  let login = req.query.login;
  let password = req.query.password;
  accs.push({login: hashCode(login), password: hashCode(password)})
  console.log(login + " " + password);
  res.send("Created: L:" + hashCode(login) + " P:" + hashCode(password));
})

React Native 获取:

  registerAcc() {
    var details = {
    'login': 'Login',
    'password': 'Password!',
  };

  var formBody = [];
  for (var property in details) {
    var encodedKey = encodeURIComponent(property);
    var encodedValue = encodeURIComponent(details[property]);
    formBody.push(encodedKey + "=" + encodedValue);
  }
  formBody = formBody.join("&");

  fetch('http://localhost:8082/register', {
    method: 'POST',
    headers: {
      'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
      'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
    },
      body: formBody
    }).then((response) => {
      this.setState({msg : "1"})
    }).catch((error) => {
      this.setState({msg : '2'});
    });
  }

模拟器还显示了一个通信:

Possible Unhandled Promise Resection (id: 0): Network request failed...

但是提供了catch功能

当您在 Android 模拟器中使用 "localhost" 时,指的是移动设备而不是您的计算机。

您可以在应用程序中将 localhost 替换为“10.0.2.2”,这是 android 模拟器主机的别名,在这种情况下,就是您的计算机。

参见:https://developer.android.com/studio/run/emulator-commandline.html#networkaddresses

或者

获取网络地址,您也可以在手机上运行(如果在同一网络中)。在 windows 中,在您的 CMD 中使用命令 ipconfig 获取网络 IPv4 地址。