2016-06-20 8 views
1

ich mit einem Fehler in Chrom wie dies eine mailchimp api und stieß auf eine Cross-Domain-Ausgabe umzusetzen versuchte:CORS Ausgabe Durchführung api in Anrufe reagieren/Redux Anwendung

XMLHttpRequest nicht https://us9.api.mailchimp.com/3.0/members laden kann. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Nein Der 'Access-Control-Allow-Origin'-Header ist auf der angeforderten -Ressource vorhanden. Herkunft 'http://example.com' ist daher nicht erlaubt Zugang. Die Antwort hatte HTTP-Statuscode 501.

Nach einigen Recherchen es stellt sich heraus, dass api Anrufe ich sind aus dem Browser machen (ich einfach api Anruf von einem meiner Handlungen), aber dieses Problem zu beheben sie müssen auf dem Server gemacht werden.

Daher versuche ich eine Möglichkeit zu finden, eine API vom Server innerhalb meiner Aktion aufzurufen, um dieses Problem zu umgehen.

EDIT: Eine der Lösungen, ich fand, ist für diesen Einsatz JSONP, aber ich es auch fallen musste, als ich mit ihm nicht authentifizieren kann.

+1

Es gibt [einige] (https://npms.io/search?term=mailchimp) Knotenpakete, die mit Mailchimp interagieren. – robertklep

+0

Sie können ['node-http-proxy'] (https://github.com/nodejitsu/node-http-proxy) als Proxy für die MailChimp-API verwenden. – Steven

+0

@Steven das sieht wie eine saubere Lösung aus, ich habe versucht, ihre Dokumente durchzugehen, aber immer noch nicht verstehen, wie genau es eingerichtet werden sollte, könnten Sie hier ein Beispiel als Antwort geben? – Ilja

Antwort

0

Die Lösung, die ich zu Proxy-api gefunden ruft durch Eil auf folgende Weise:

In Ihrer ausdrücklichen config:

import request from 'request' 

app.use('/api', function (req, res) { 
    let url = 'your_api_url' + req.url 
    req.pipe(request(url)).pipe(res) 
}) 

Was Sie stattdessen tun können https://myapi.com/endpoint des Aufrufs in Ihre Komponenten verwenden /api/endpoint auf diese Weise express wird alle Instanzen von /api auf Ihrem Server mit Ihrer API Url ersetzen und führen Sie einen API-Aufruf vom Server selbst.

+0

Ich habe ein ähnliches Problem google places api. Wie würde ich das aus meiner React-Aktion nennen? Im Moment habe ich so etwas. \t let url = '$ {GOOGLE_URL}/textsearch/json? Query = $ {Standort} & pagetoken = $ {nextPageToken} & radius = 500 & key = $ {GOOGLE_KEY}' Wie würde ich die obige Express API in meinem Anruf verwenden? –