我目前正在开发一个应用程序,它有一个单独的前端和后端。
后端是 Spring Boot ,只接受带有自签名证书的HTTPS。前端是和React Native App with Expo。
目前,我无法通过前端发送HTTPS请求。当我这样做时,它给我以下错误:
Network request failed
at node_modules\whatwg-fetch\dist\fetch.umd.js:null in setTimeout$argument_0
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in _allocateCallback$argument_0
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in _callTimer
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in callTimers
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __callFunction
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __guard$argument_0
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __guard
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in callFunctionReturnFlushedQueue
我更新了我的自签名证书,因为我在网上看到可能会导致问题。以下是packagejson中的脚本:
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
我发送请求的代码可以在这里找到:
login = () => {
const data = { email: email, password: password};
const options = {
method: 'POST',
};
console.log(data);
fetch(`https://192.xxxx:8443/login?email=${encodeURIComponent(data.email)}&password=${encodeURIComponent(data.password)}`, )
.then((reponse) => reponse.json())
.then(responseJson => {
console.log(responseJson);
})
.catch((error) => console.log(error));
};
其中xxxx是从命令提示符中找到的IP地址。我不知道是什么导致了这个问题。请求没有到达前端,但是当我使用postman时,它们工作得很好。我不知道我是否必须在前端中包含crt文件并更改配置,或者只是为前端创建一个新文件,这样两者都是安全的,可以通信。
有人能帮我解释一下错误和逻辑吗?
- 已续订证书
- 已转换为Ipv4
1条答案
按热度按时间r6vfmomb1#
问题是IOS无法定位localhost。两个IP都不工作。我使用ngrok在线托管本地主机。这样网络错误就被修复了。