Ich habe eine kleine API mit Node / Express erstellt und versucht, Daten mit Angularjs abzurufen, aber da meine HTML-Seite unter Apache auf localhost: 8888 ausgeführt wird und die Node-API auf Port 3000 abgehört wird, erhalte ich die No 'Access-Control- Allow-Origin '. Ich habe versucht, node-http-proxy
Vhosts Apache zu verwenden, habe aber nicht viel Erfolg. Siehe vollständigen Fehler und Code unten.
XMLHttpRequest kann localhost: 3000 nicht laden. In der angeforderten Ressource ist kein Header 'Access-Control-Allow-Origin' vorhanden. Origin 'localhost: 8888' ist daher kein Zugriff gestattet. "
// Api Using Node/Express
var express = require('express');
var app = express();
var contractors = [
{
"id": "1",
"name": "Joe Blogg",
"Weeks": 3,
"Photo": "1.png"
}
];
app.use(express.bodyParser());
app.get('/', function(req, res) {
res.json(contractors);
});
app.listen(process.env.PORT || 3000);
console.log('Server is running on Port 3000')
Winkelcode
angular.module('contractorsApp', [])
.controller('ContractorsCtrl', function($scope, $http,$routeParams) {
$http.get('localhost:3000').then(function(response) {
var data = response.data;
$scope.contractors = data;
})
HTML
<body ng-app="contractorsApp">
<div ng-controller="ContractorsCtrl">
<ul>
<li ng-repeat="person in contractors">{{person.name}}</li>
</ul>
</div>
</body>
Die akzeptierte Antwort ist in Ordnung. Wenn Sie etwas Kürzeres bevorzugen, können Sie ein Plugin namens cors verwenden, das für Express.js verfügbar ist
Für diesen speziellen Fall ist es einfach zu bedienen:
quelle
{origin: 'null'}
damit es funktioniert ... Anscheinend sendet mein Browsernull
als Ursprung?app.use(cors({origin: '*'}));
hat für mich gearbeitet, laut enable-cors .Eine andere Möglichkeit besteht darin, einfach die Überschriften zu Ihrer Route hinzuzufügen:
quelle
)
von Smiley verwirrte michDie beste Antwort hat für mich gut funktioniert, außer dass ich mehr als eine Domain auf die Whitelist setzen musste.
Auch Top-Antwort leidet unter der Tatsache, dass
OPTIONS
Anfrage nicht von der Middleware bearbeitet wird und Sie sie nicht automatisch erhalten.Ich speichere Domains auf der Whitelist wie
allowed_origins
in der Express-Konfiguration und stelleorigin
seitdem die richtige Domain entsprechend dem Header einAccess-Control-Allow-Origin
nicht mehr als eine Domain angegeben werden kann.Folgendes habe ich erreicht:
quelle
Der Antwortcode erlaubt nur localhost: 8888. Dieser Code kann nicht für die Produktion oder für andere Server- und Portnamen bereitgestellt werden.
Verwenden Sie stattdessen Folgendes, damit es für alle Quellen funktioniert:
quelle
Installieren Sie die cors-Abhängigkeit in Ihrem Projekt:
Fügen Sie Ihrer Serverkonfigurationsdatei Folgendes hinzu:
Es funktioniert bei mir mit 2.8.4 cors Version.
quelle
"cors": "^2.8.5", "express": "^4.16.3",
funktioniert gut nur mit der vorgeschlagenen Zeile @monikaja. Vielen Dank!Das hat bei mir funktioniert.
Sie können * an Ihre Bedürfnisse anpassen. Hoffe das kann helfen.
quelle
Hallo, das passiert, wenn das Frontend und das Backend auf verschiedenen Ports laufen. Der Browser blockiert die Antworten aus dem Backend, da keine CORS-Header vorhanden sind. Die Lösung besteht darin, die CORS-Header zur Backend-Anforderung hinzuzufügen. Am einfachsten ist es, das cors npm-Paket zu verwenden.
Dadurch werden CORS-Header in allen Ihren Anforderungen aktiviert. Weitere Informationen finden Sie in der Dokumentation zu cors
https://www.npmjs.com/package/cors
quelle
quelle
Fügen Sie den folgenden Code in app.js von NODEJ Restful API hinzu, um den Fehler "Access-Control-Allow-Origin" in Winkel 6 oder einem anderen Framework zu vermeiden
quelle
Sie können "$ http.jsonp" verwenden
ODER
Nachfolgend finden Sie die Problemumgehung für Chrom für lokale Tests
Sie müssen Ihr Chrom mit dem folgenden Befehl öffnen. (Drücken Sie Fenster + R)
Hinweis: Ihr Chrom darf nicht geöffnet sein. Wenn Sie diesen Befehl ausführen, wird Chrome automatisch geöffnet.
Wenn Sie diesen Befehl an der Eingabeaufforderung eingeben, wählen Sie Ihr Chrome-Installationsverzeichnis aus und verwenden Sie diesen Befehl.
Unten Skriptcode für Open Chrome in MAC mit "--allow-file-access-from-files"
zweite Optionen
Sie können einfach open (1) verwenden , um die Flags hinzuzufügen: open -a 'Google Chrome' --args --allow-file-access-from-files
quelle
quelle