ReactJS API-Daten Abrufen CORS Fehler
Ich habe versucht, zu reagieren, erstellen Sie eine web-app jetzt seit ein paar Tagen für mein Praktikum und ich habe festgestellt ein CORS-Fehler. Ich verwende die neueste version von reactJS, und platzieren Sie diesen in der create-react-app
, und unten ist der code für das Holen:
componentDidMount() {
fetch('--------------------------------------------',{
method: "GET",
headers: {
"access-control-allow-origin" : "*",
"Content-type": "application/json; charset=UTF-8"
}})
.then(results => results.json())
.then(info => {
const results = info.data.map(x => {
return {
id: x.id,
slug: x.slug,
name: x.name,
address_1: x.address_1,
address_2: x.address_2,
city: x.city,
state: x.state,
postal_code: x.postal_code,
country_code: x.country_code,
phone_number: x.phone_number,
}
})
this.setState({warehouses: results, lastPage: info.last_page});
})
.then(console.log(this.state.warehouses))
}
Tut mir Leid, dass kann ich nicht posten Sie die url für die API aufgrund von Vorschriften, es wird jedoch bestätigt, dass es keine CORS-Einstellung in der API-backend.
Ich allerdings die folgenden Fehler treten beim starten auf mozilla
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ------------------. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
und
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ---------------------------------------------. (Reason: CORS request did not succeed).
Wenn laufen auf chrome gibt es den folgenden Fehler
Failed to load resource: the server responded with a status of 405 (Method Not Allowed)
und
Failed to load --------------------------------------------------------: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 405. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
und
Uncaught (in promise) TypeError: Failed to fetch
Andere Sache ist, dass ich bin in der Lage, öffnen Sie die url in meinen Browser ohne Probleme oder was auch immer.
Bitte um Hilfe und danke!
Zusätzliche Informationen
Der Grund, warum ich fügte hinzu, die CORS-Einstellung ist, weil es gibt ein CORS-Fehler, so dass das entfernen es ist nicht wirklich das Problem zu lösen.
Als Nächstes habe ich versucht, proxy Einstellung, aber es gibt jetzt
Unhandled Rejection (SyntaxError): Unexpected token < in JSON at position 0
Laut internet dies wird verursacht, weil die Antwort keine JSON. Allerdings, wenn ich überprüft die API, es gibt diese
was bedeutet, dass der Rückgabetyp sollte ein JSON-Recht?
Zusätzliche Info
überprüfung der Antworten wird der Ertrag dieser
{"status":200,"total":1,"per_page":3,"current_page":1,"last_page":1,"next_page_url":null,"prev_page_url":null,"from":1,"to":3,"data":[{"id":1,"slug":"america","name":"america","address_1":"USA Court","address_2":"USA","city":"USA","state":"USA","postal_code":"94545","country_code":"US","phone_number":"10000001","created_by":null,"updated_by":null,"created_at":"2017-11-10 11:30:50+00","updated_at":"2018-06-28 07:27:55+00"}]}
- Haben Sie versucht, ein proxy in Ihrem
package.json
? Irgendwo oben Ihre Abhängigkeiten:"proxy": "http://yourAPI"
- verwenden Sie nicht Antwort - Header in einen Antrag (d.h.
access-control-allow-origin
ist ein Antwort-header) - dies wird unweigerlich auslösen CORS-preflight, die der server kann das nicht verstehen - aber, wenn der server nicht zulassen, CORS, es gibt nichts, was ein Kunde tun kann, über die es direkt - es wird bestätigt, dass es keine CORS-Einstellung in der API-backend - dann CORS nicht zugelassen werden - Sie haben Ihre eigene Frage beantwortet!!! Lesen Sie, wie CORS funktioniert hier
- Wenn nicht, CORS aktiviert oder api nicht dienen, JSONP, müssen Sie einen proxy verwenden, die entweder auf dem server die du kontrollierst, oder ein Drittel party-service
- er wirft noch einen CORS Fehler, auch wenn ich entfernt die cors-Einstellung, mit zu beginnen, es wurde nur dort platziert, nach der Begegnung mit einem cors-Fehler. Ich werde versuchen, die proxy-Sache zuerst
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den CORS-Einstellungen müssen konfiguriert werden, die in der API für den Zugriff aus Ihrem Reagieren app-Domäne. Keine CORS-Einstellungen, kein AJAX aus verschiedenen Domänen. Es ist einfach so. Sie können entweder fügen Sie CORS-Einstellungen, um Ihre Unternehmens-API (dies ist eher unwahrscheinlich), oder Sie arbeiten können, um, wie unten beschrieben:
Den CORS ist lediglich ein Mechanismus der client-browser, um Benutzer vor bösartigen AJAX. Also eine Möglichkeit, dies zu umgehen, ist die Proxyfunktion deinen AJAX-request von Ihr Reagieren-app seinen eigenen web-server. Wie Vincent schon sagt, die
create-react-app
bietet eine einfache Möglichkeit, dies zu tun: in Ihrempackage.json
Datei einfach chuck"proxy": "http://your-company-api-domain"
. Weitere details finden Sie in dieser linkDann in Ihrem reagieren-app können Sie mit relative URL wie diese:
fetch('/api/endpoints')
. Beachten Sie, dass die relative URL hat, um mit Ihrem Unternehmen API. Dies sendet eine Anfrage an den server, der server leitet die Anfrage an Ihr Unternehmen-API und die Rückgabe der Antwort zurück an die app. Da die Anfrage verarbeitet wird, in der server-zu-server-nicht-browser-zu-server-also die CORS-check wird nicht passieren. Daher können Sie loszuwerden, alle unnötigen CORS Header in Ihrer Anfrage.404
..catch(error => console.log(error))
auf Ihren Anruf heranholen und Debuggen von dort