获取 TypeError:从物理设备 POST 到我的节点服务器时网络请求失败

Posted

技术标签:

【中文标题】获取 TypeError:从物理设备 POST 到我的节点服务器时网络请求失败【英文标题】:Getting TypeError: Network request failed while POSTing to my node server from Physical Device 【发布时间】:2021-11-03 11:05:39 【问题描述】:

我想要什么:

在注册时将一些凭据发布到我的节点服务器并将用户保存在 MongoDB 中

怎么了:

TypeError:来自 React Native 的 POST 请求的网络请求失败

我做了什么

将本地主机更改为我机器的 IP 在 android Manifest 中添加 android:usesCleartextTraffic="true" 使用 ngork 生成的 IP 使用 POSTMAN 检查了我的服务器代码,它工作正常!

React Native 代码:

POST 请求:

fetch('http://MY_MACHINE_IPv4:3001/signup', 
  method: 'POST',
  headers: 
    Accept: 'application/json',
    'Content-Type': 'application/json',
  ,
  body: JSON.stringify(
    fullName: fullName,
    email: email,
    phone: phone,
    password: pass,
  ),
)
  .then(response => response.json())
  .then(data => console.log(data));

节点代码:

router.post("/signup", async (req, res) => 
    const  fullName, email, phone, password  = req.body
  console.log("The Email in request is ", email)
  console.log("The Password in request is ", password)
  try 
    const user = new User( fullName, email, phone, password )
    console.log("USER BEING SAVED")
    await user.save()
    const token = jwt.sign( userId: user._id , jwtKey)
    res.send( token: token )
   catch (err) 
    res.status(422).send(err.message)
  
)

错误:

WARN 可能的未处理 Promise Rejection (id: 0): TypeError:网络请求失败 TypeError:网络请求失败 在匿名(http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:25389:33) 申请时(本机) 在匿名(http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:29526:26) 在 _callTimer (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:29446:17) 在 callTimers (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:29647:19) 申请时(本机) 在 __callFunction (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:6319:36) 在匿名(http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:6043:31) 在 __guard (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:6270:15) 在 callFunctionReturnFlushedQueue (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.healthapp&modulesOnly=false&runModule=true:6042:21)

【问题讨论】:

【参考方案1】:

如果您使用的是 android 模拟器,Android 模拟器总是在标头上发送 charset: utf-8。所以您需要更改 nginx 设置以允许该附加标头

【讨论】:

我在标题中写了我正在使用物理设备。

以上是关于获取 TypeError:从物理设备 POST 到我的节点服务器时网络请求失败的主要内容,如果未能解决你的问题,请参考以下文章

获取磁盘设备的物理设备对象名称

如何获取Cisco设备OID值来监控各种物理及逻辑状态信息

php curl post 获取数据接口 同步局域网 人脸识别设备数据

这是不是可以从 xcode 将 iphone 应用程序运行到 ipad 物理设备中?

NodeJs获取不到POST参数

jQuery Post blob 对象给出 Uncaught TypeError: Illegal invocation