我正在使用 Ionic (Vue) 開發一個應用程式,并且已經設定了一個服務器端(帶有 FastAPI 的 Python)。
雖然在瀏覽器 ( ) 上運行我的應用程式時發送請求沒有問題ionic serve,但在 iOS 模擬器上運行它時卻沒有這樣做。
我已經嘗試過axiosCapacitor HTTP 庫,結果是一樣的。以下僅是來自客戶的相關部分:
<template>
<base-layout page-title="Choose Players" page-default-back-link="/home">
<ion-item v-for="contact in contacts" :key="contact.phoneNumbers[0]" @click="toggleContact(contact)">
<ion-icon v-if="isContactSelected(contact)" slot="end" :icon="checkmark"/>
{{ contact.displayName }}
</ion-item>
<ion-button expand="block" @click="inviteSelectedContacts">Invite Selected Contacts</ion-button>
</base-layout>
</template>
<script>
import { IonItem, IonIcon, IonButton } from "@ionic/vue";
import { checkmark } from 'ionicons/icons';
import { Contacts } from "@capacitor-community/contacts";
import { serverURL } from '@/components/Config';
// import axios from 'axios';
import { Http } from '@capacitor-community/http';
export default {
name: "AddPlayers",
data() {
return {
contacts: [],
chosenContacts: new Set()
};
},
methods: {
async inviteSelectedContacts() {
let data = {userId: 'test id', users: this.chosenContacts}
let url = `${serverURL}/inviteUsers`;
try {
let options = {url: url, data: data}
let res = await Http.post(options);
if (res.status === 200){
alert(res.status)
}
return res.data
}
catch (err) {
alert(err);
}
}
},
我的結論是,它與 CORS僅針對 Capacitor 沒有正確定義(因為它們對瀏覽器作業得很好)有某種關系,但我不明白我應該在哪里定義這些。
服務器 API 網址是http://fastapi.localhost:8008
更新:
我能夠記錄并查看錯誤(通過Xcode):
[log] - {"message":"Network Error","name":"Error","stack":"createError@\nhandleError@","config":{"transitional":{"silentJSONParsing":true,"forcedJSONParsing":true,"clarifyTimeoutError":false},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxBodyLength":-1,"headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json"},"method":"post","url":"http://fastapi.localhost:8008/inviteUsers","data":"{\"userId\":\"test id\",\"users\":{}}"},"status":null}
uj5u.com熱心網友回復:
太多時間浪費在這上面了...
事實證明,解決方案是將開發服務器 URL 更改為基于 IP 的 URL:(http://127.0.0.1:8008在我的情況下)。
我不知道為什么 Capacitor 不接受 DNS 命名。
我可以通過將這個虛擬端點添加到我的服務器來驗證它:
from fastapi import FastAPI, Request
...
@app.post("/dummypath")
async def get_body(request: Request):
return await request.json()
所以現在來自客戶:
async inviteSelectedContacts() {
// let data = {userId: 'test id', users: this.chosenContacts}
let data = {}
let url = `${serverURL}/dummypath`;
try {
let res = await axios.post(url, data);
if (res.status === 200){
alert(res.status)
}
alert(res);
return res.data
}
catch (err) {
console.log(err);
alert(err);
}
}
serverURL在哪里http://127.0.0.1:8008
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450286.html
