Ich versuche, in node.js einen Webserver zu erstellen, der domänenübergreifendes Scripting unterstützt und gleichzeitig statische Dateien aus einem öffentlichen Verzeichnis bereitstellt. Ich verwende die Datei express.js und bin mir nicht sicher, wie ich domänenübergreifendes Scripting zulassen soll ( Access-Control-Allow-Origin: *
).
Ich habe diesen Beitrag gesehen , den ich nicht hilfreich fand.
var express = require('express')
, app = express.createServer();
app.get('/', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
var oneYear = 31557600000;
// app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
Antworten:
Schauen Sie sich das Beispiel von enable-cors.org an :
Der erste Aufruf (
app.all
) sollte vor allen anderen Routen in Ihrer App erfolgen (oder zumindest vor denen, für die Sie CORS-fähig sein möchten).[Bearbeiten]
Wenn die Header auch für statische Dateien angezeigt werden sollen, versuchen Sie dies (stellen Sie sicher, dass dies vor dem Aufruf von
use(express.static())
:Ich habe dies mit Ihrem Code getestet und die Header für Assets aus dem
public
Verzeichnis abgerufen :Sie können die Funktion natürlich in ein Modul packen, um so etwas zu tun
quelle
use
ingapp.router
vor ,express.static
dass es die Header für statische Dateien nicht ändern wird; Auf jeden Fall habe ich meine Antwort so aktualisiert, dass sie funktioniert.Nach der @ Michael Tilley-Lösung hat es anscheinend zunächst bei mir nicht funktioniert. Ich weiß nicht warum, vielleicht verwende ich Chrome und eine andere Version des Knotens. Nach einigen kleinen Änderungen funktioniert es jetzt für mich.
Falls jemand mit einem ähnlichen Problem wie ich konfrontiert ist, kann dies hilfreich sein.
quelle
Versuchen Sie es mit diesen cors npm Modulen.
Dieses Modul bietet viele Funktionen zur Feinabstimmung der Cors-Einstellungen, z. B. Whitelist für Domänen, Aktivierung von Cors für bestimmte APIs usw.
quelle
Ich benutze das:
Dieser Code setzt voraus, dass sich Ihre Controller im Controller-Verzeichnis befinden. Jede Datei in diesem Verzeichnis sollte ungefähr so aussehen:
quelle
Empfehlen Sie die Verwendung des Cors Express-Moduls. Auf diese Weise können Sie Domänen auf die Whitelist setzen, Domänen speziell für Routen zulassen / einschränken usw.
quelle
Sie müssen festlegen
Access-Control-Allow-Credentials: true
, ob Sie "Cookie" über "Anmeldeinformationen" verwenden möchten.quelle
});
Fügen Sie diesen Code in Ihre Datei index.js oder server.js ein und ändern Sie das zulässige Ursprungsarray entsprechend Ihren Anforderungen.
quelle
Ein weiterer Schritt, den ich unternehmen musste, war das Umschalten meiner URL von auf
http://localhost
nachhttp://127.0.0.0
quelle