Node.Js Fehler "Keine" Access-Control-Allow-Origin' - header vorhanden ist, auf die angeforderten"
Diese Frage ist ähnlich wie andere, aber es ist ein Unterschied, der macht es sehr verwirrend, warum es nicht funktioniert.
Mein JavaScript aufrufen 6 von json-Dateien und alles richtig funktioniert. In Node.JS ich habe cors-Header und eingerichtet wie unten gezeigt:
var fs = require('fs');
var http = require("https");
var express = require('express');
var app = express();
var path = require('path');
var http = require("http");
var url = require("url");
var req = require('request')
var pem = require('pem');
var cors = require("cors");
app.use(express.static(path.join(__dirname, '../')));
app.listen(process.env.PORT || 8080);
app.options('*', cors());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested- With, Content-Type, Accept");
next();
});
app.all('/posts', function(req, res){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});
app.get('/', function (req, res) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.writeHead(200, {'Content-Type': 'text/plain'});
contents = fs.readFileSync("sliderImages.json", "utf8");
console.log(path.join(__dirname, '/sliderImages.json'));
res.end(contents);
});
Alle 6 json-Dateien sind gepackt von der absoluten URL-Pfad von Node JS. Ich habe 2 weitere gestern und alles war in Ordnung arbeiten. Doch heute machte ich ein und implementiert die gleiche Art und Weise und erhielt die folgende Fehlermeldung:
Kein 'Access-Control-Allow-Origin' - header vorhanden ist, auf die angeforderte Ressource. Herkunft 'null' ist daher nicht der Zugriff erlaubt.
Ich die Umsetzung jeder die gleiche Weise, Beispiel:
var base_url = 'http://127.0.0.1:8080';
mainInformationTop();
function mainInformationTop()
{
$.ajax({
type: "GET",
url: base_url + "/api/topInformation.json",
dataType: "json",
success: function(response)
{
var json_obj = response.mainDescription;
var imagesSlider="";
var imagesSliderDescription ="";
for (var i = 0; i< json_obj.length; i++)
{
}
}
,
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.status);
}
})
}
Ich glaube nicht, dass die json-Datei ist relevant, aber unten ist meine json-Datei:
{"mainDescription":[
{
"display": "my display",
"description" : "my description"
}
]}
Ich nahm die Informationen in der for-Schleife für die Prüfung als auch meine Anhängen, weil irrelevant. Aus irgendeinem Grund fehlschlägt und geht auf Fehler statt auf Erfolg. Alle anderen Anrufe eingerichtet werden, der gleichen Art und Weise funktionieren.
- Ich versuchte, die, sowie alle anderen funktionieren.
- Warum? Der server scheint nicht zu generieren JSONP.
- Der Wechsel zu jsonP lässt Sie alle scheitern
- Ich denke, nur Typ json ist in Ordnung, da brauche ich keine Rückrufe. Und der rest alles nur für json sowie
- Sie sollten NICHT
readFileSync
imapp.get
. (Aber das löst nicht Ihr Problem.) Sie sicher, es sollte benannt werden/postss
statt/posts
? (Das ändern könnte, dass nicht die Frage zu lösen, entweder.) Führen Sie diese lokale Datei in einem browser, anstatt von einem lokalen server? Das vielleicht erklärt die Herkunft "null"? - Siehe hier: XmlHttpRequest Fehler: Origin null ist nicht erlaubt, Access-Control-Allow-Origin
- sorry, war Tippfehler bei der Formatierung werde ich beheben.
- das macht absolut keinen Sinn. wissen Sie, was JSONP ist?
- Ja, es verwendet, um die bypass-cross domains. Aber es funktioniert nicht mit, und arbeitete mit json
- sorry für die Verwirrung, war nicht Sinn Sie. aber in $.ajax, du bist anfordern von Daten von einem .json-Datei, das ist eine statische Datei, die in Ihrem statischen Verzeichnis richtig?
- Ja, habe ich alle diese Dateien in ein statisches Verzeichnis.
- Sie scheinen nicht zu Einstellung cors-Header für die Dateien.
- Ich nicht ganz Folgen, ich bin neu cors. Ich habe diese app.Optionen('*', cors()); Und die anderen 6 fein gearbeitet, so verstehe ich nicht, warum das scheitern eines 1 neuen jetzt. Wenn Sie nicht wissen, die Antwort geben Sie bitte eine Antwort ob es funktioniert kann ich markieren Sie es richtig.
- Die anderen 6 werden auch die Dateien statische Dateien? die .Optionen () - Einstellung behebt nur Anfragen, die erfordern, dass ein preflight, eine Ebene .Holen Sie sich eine statische Datei nicht erforderlich, einen "preflight".
- Auch ich verstehe nicht, warum Menschen unten stehen, Stimmabgabe, wenn seine eine berechtigte Frage.
- Wahrscheinlich, weil diese Frage kommt jeden Tag, und das problem ist immer das gleiche: die cors-Header nicht gesetzt. Ich verstehe, dass Sie versuchen, Sie, aber, Sie waren noch nicht erfolgreich.
app.use(cors());
gemäß der Dokumentation. - Irgendwelche Tipps oder eine Antwort, die Sie bieten können? Sorry, wenn es das doppelte habe ich nicht bemerkt, dass es wohl die gleichen.
- Scheint dies, wie die richtige track-app.verwenden, (cors({origin: 'localhost:8080'}));?
- Sie sollten nicht brauchen, die {origin: Teil, es sei denn, Sie beschränken wollten, es unten zu nur Ihre app-Zugriff über den browser (nicht aufhören können, anderen Servern ab, es zu tun, obwohl, wenn Sie den server in der wildnis)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine viel einfachere version des diese Antwort, die den gleichen Effekt erzielt:
Festnetz.
Trotz allem, was die Kommentare, die sagte, die einzige wirkliche Sache, die ich geändert habe, war das verschieben der app.verwenden Sie vor allem anderen. Dies löste das Problem.
cors
Modul...Ich auch unter diesem problem leiden der code war die gleiche wie oben, aber wir wollen, um den code in Ausgangspunkt. dont fügen Sie diesen code in letzten das bedeutet, dass vor (res.end()) sendet Antwort an client. Drei Methoden (GET,POST,HEAD) erlaubt, dass Sie, wenn Sie diesen code überall ich denke aber für die andere Methode versuchen, diese und versuchen Sie es mit anderen Modulen wie cors -, express -, aber ich verwendet das http-Modul nur