我看了几篇关于这个主题的帖子,但没有结果。我一方面有一个表格,收集信息(姓名,名字等),然后将其保存在数据库(mongodb)中。当我使用 Postman 通过路由/注册发送我的信息时,一切正常,我可以在mongodb中看到我的新用户。但当我在世博会上启动应用程序时,他向我抛出"网络请求失败"。
前端提取:
submitForm = () => {
var signupData = JSON.stringify({
first_name: this.state.firstName,
last_name: this.state.lastName,
email: this.state.email,
password: this.state.password
});
fetch(`https://localhost:3000/signup`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: signupData
})
.then(response => {
console.log(response);
return response.json();
})
.then(data => {
if (data.result) {
this.props.handleUserValid(
this.state.firstName,
this.state.lastName,
this.state.email,
data.user.token
);
this.props.navigation.navigate("Account");
}
})
.catch(error => {
console.error(error);
});
};
和后端路由:
router.post("/signup", function(req, res, next) {
var salt = uid2(32);
console.log("Signup is running...");
const newUser = new userModel({
first_name: req.body.first_name,
last_name: req.body.last_name,
email: req.body.email,
password: SHA256(req.body.password + salt).toString(encBase64),
token: uid2(32),
salt: salt
});
newUser.save(function(error, user) {
console.log("LOG: user", user);
res.json({ result: true, user });
});
});
module.exports = router;
这是错误的屏幕截图
再次使用Postman时,获取工作良好,我的控制台日志被打印,用户添加到我的数据库中。谢谢帮助。
- --编辑--*
我通过Expo在网络浏览器中启动了这个应用程序,一切都很完美。我的登录/注册页面和我的帐户页面。但在我的手机上它不工作(IOS),这是我手机的网络问题(可能是证书问题,错误的IP?)
如果你有我感兴趣的主意,我已经想了两天了
8条答案
按热度按时间xmjla07d1#
React-native Expo和Python Django后端也有同样的问题。问题是模拟器localhost和服务器localhost之间的冲突。你的后端服务器可能运行在127.0.0.1:8000上,但模拟器找不到它。
在终端中,使用命令“ipconfig”找到您的Ipv4地址。例如,它将是192.138.1.40
在此之后,将其放入您的获取(“http://192.138.1.40:8000/”)。
同样重要的是-使用相同的主机和端口运行后端服务器。
例如,在python Django上:
运行manage.py服务器192.138.1.40:8000
在Django上你还需要在www.example.com中添加ALLOWED_HOSTS =['192.138.1.40']settings.py
j8yoct9x2#
使用expo时,请使用设备(计算机)的IP地址(http://192.168.x.x:3000/ "signup"),而不是"localhost"。此方法对我有效。请确保您的PC和手机连接到同一网络。在命令提示符下键入
ipconfig/all
以查找IP地址。更新:
看起来这是我的问题,加上我的室友霸占了wifi带宽。缓慢的互联网连接可能也是一个问题。atb与您的问题。
kgqe7b3p3#
我对世博会也有同样的问题:对于我的后端,我使用json-server来模拟API数据。在我的例子中,json-server运行在http://localhost:3000/playlist上
我没有使用fetch(“http://localhost:3000/playlist”),而是使用fetch(http://10.0.2.2:3000/playlist),然后它工作了。使用Android模拟器,它找不到服务器的地址。
有关使用www.example.com的原因10.0.2.2,请查看此处。why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client
mrfwxfqh4#
我也有同样的问题--对我有效的方法是:
1.在主机www.example.com上运行本地服务器0.0.0.0
1.转到网络偏好设置并找到我的局域网IP地址(例如192.168.1.1)
1.将移动的应用程序中我的url中的主机替换为LAN IP(例如http://192.168.1.1:3000/signup)
1.重新加载和测试
对于使用无服务器的任何人,我使用此命令在www.example.com上运行0.0.0.0
ecbunoof5#
我遇到了类似的问题。显然,模拟器不理解或看到'localhost'作为主机。我做了什么:在你的cmd上运行
ipconfig
,复制ipv4地址,然后使用它来替换你的服务器主机的'localhost'。cedebl8k6#
确保检查仿真器上的日期和时间,以便从react native发出远程请求
日期和时间设置不准确还可能导致SSL证书出现问题,SSL证书用于验证正在与之通信的服务器的身份。如果模拟器上的时钟与服务器的时钟不同步,则SSL证书可能显示为无效,从而阻止发送请求。
yh2wf1be7#
您应该检查URL
https://localhost:3000/signup
(X)http://localhost:3000/signup
(O)非HTTPS
55ooxyrt8#
如果任何人面临这个问题与托管后端服务器这是为您的知识。
但我仍然面临着以下问题。
经过一番研究,我发现这是因为服务器的响应时间太慢。网络请求由于超时而失败。
所以在用后端服务器测试你的应用之前,从网络(或任何其他方式)向你的服务器发送一些请求。因为一些服务器在一段时间后会变得不活动。请确保你有一个良好的连接。