2017-11-22 2 views
2

Ich benutze Nodejs Server, Express-Framework und Fetch-Bibliothek, um Anfrage an einen anderen Server zu senden, der in einer anderen Domäne ist. Für einen meiner Endpunkte in Betracht ziehen (localhost: 8080/login) Ich rendere EJS-Datei, wenn der Benutzer auf die Login-Schaltfläche klickt Ich sende eine Fetch-Anfrage an einen anderen Server in einer anderen Domäne (http://www.ireserver.com/login). Ich kann diese Anfrage nicht senden. Ich erhalte diesen Fehler:Die Antwort auf die Preflight-Anforderung übergibt die Kontrolle der Zugriffssteuerung nicht: Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden.

Antwort auf Preflight-Anfrage nicht übergeben Kontrolle der Zugriffskontrolle: Keine 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Ursprung 'http://localhost:8080' ist daher nicht erlaubt. Die Antwort hatte den HTTP-Statuscode 404. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, setzen Sie den Modus der Anfrage auf 'no-cors', um die Ressource mit deaktiviertem CORS zu holen.

Ich bin nicht sicher, wie mit diesem Problem umzugehen. Bitte schlagen Sie einige Ideen oder Links vor, die dieses Problem lösen können.

+1

Mögliches Duplikat von [Antwort auf Preflight-Anforderung übergibt keine Zugriffskontrollprüfung: Auf der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden] (https://stackoverflow.com/questions/33836459/ Response-to-Preflight-Anfrage-Doesnt-Pass-Access-Control-Check-No-Zugriff-cont) – Aaqib

+0

haben Sie 'App.Verwenden Sie (cors()); 'in Ihrer js-Datei? – mast3rd3mon

+0

@ mast3rd3mon ja ich habe verwendet. – Rajeev

Antwort

0

Ich fand die Lösung für mein Problem. Ich versuche zu erklären, was ich verstanden habe, wie ich ein Anfänger in der Serverseite und der Netzentwicklung bin.

Dies war das Problem, vor dem ich stand: Für einen meiner Endpunkte in meinem NodeJS-Server, betrachten (localhost: 8080/Login) ich render ejs-Datei, wenn der Benutzer auf Login-Taste in dieser EJS-Datei klickt, sende ich Anforderung an einen API (https: otherserver.com/signin) eines anderen Servers, der sich in einer anderen Domäne befindet. Ich kann diese Anfrage nicht senden. Ich habe ein Problem bekommen.

Cors Problem trat auf, weil die Server-Domäne (mein Nodejs-Server), die die EJS-Datei gerendert und die andere Domäne (https: otherserver.com/signin), die ich holen Anforderung nach dem Klicken auf Login-Schaltfläche war anders.

so Lösung war:

ich die Anfrage holen machen müssen zuerst auf der gleichen Domäne (mein NodeJS Server localhost: 8080/api/signin). Und dann von diesem Server aus sollte ich die API einer anderen Domäne aufrufen (https: otherserver.com/signin). Dadurch werden wir keine Probleme bekommen. Weil die clientseitige EJS-Datei den gleichen Server anfordert, der die Datei gerendert hat. Und dann umgeht der Server die Anfrage an den anderen Server.

Code von Client-Seite Javascript-Datei./Api/signin ist ein Endpunkt in meinem lokalen NodeJS Server und u die Optionen hinzufügen:

options ={ 
    method : 'POST', 
    headers : { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
     } 

    body : JSON.stringify({ 
     email_address : emailId, 
     password : pwd 
    }) 
}; 

fetch("/api/signin",options) 
.then(function(res) { 
    console.log(res); 
}).catch(function(error) { 
    console.log(error); 
}); 

Code aus lokaler NodeJS Server-Seite:

express.use('/api/', function (req, res, next) { 
    var options = { 
     method : req.method, 
     headers :req.headers, 
     body : JSON.stringify(req.body) 
    }; 

    fetch('https://otherserver.com'+req.path,options) 
    .then(response => {   
     return response.json(); 
    }, error => { console.error(error)}) 
    .then(function(json){ 
     res.send(json); 
    }) 
    .catch(function(error) { 
     res.send(error); 
    }); 

}) 

Hope this jemanden helfen kann, die im Server-Anfänger Entwicklung.

1

Sie können cors Middleware auf Ihrem Server verwenden.

einfachste Weg, es zu benutzen ist hinzuzufügen:

app.use(cors())

bevor alle Ihre Route Handler.

Verwandte Themen