2016-03-28 21 views
5

Nach mehreren Posts auf dem Stapel konnte ich immer noch keine richtige Antwort finden.CORS Knoten js Ausgabe

Überprüft die Dokumentation auf CORS Erweiterung.

Ich habe den folgenden Server-Code und läuft:

var WebSocketServer = require("ws").Server 
var http = require("http") 
var express = require('express') 
var cors = require('cors') 
var app = express(); 

app.use(cors()); 
var port = process.env.PORT || 9000 

var server = http.createServer(app) 
server.listen(port) 
var count = 0; 
var clients = {}; 
var rooms = {}; 
var wss = new WebSocketServer({server: server}) 
wss.on("connection", function(ws) { 
    ws.on("create-room", function(data) { 
     rooms[data] = {creator : data.user_id, created : new Date()} 
    }) 
    ws.on("close", function() { 
     console.log("websocket connection close") 
    }) 
}) 

Aber ich bekomme:

XMLHttpRequest nicht http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LE-CbU0 laden kann. Ein Platzhalter '*' kann nicht in dem Header 'Access-Control-Allow-Origin' verwendet werden, wenn das Anmeldeinformationen-Flag wahr ist. Origin 'http://localhost:8100' ist daher nicht erlaubt. Der Anmeldeinformationenmodus eines XMLHttpRequest wird durch das withCredentials-Attribut gesteuert.

Wenn ich die Zeile mit app.use(cors());

Kommentar erhalte ich:

XMLHttpRequest nicht http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LE-Cwb8 laden. No Der 'Access-Control-Allow-Origin'-Header ist auf der angeforderten -Ressource vorhanden. Herkunft 'http://localhost:8100' ist daher nicht erlaubt Zugriff. Die Antwort hatte HTTP-Statuscode 404.

So klar mein Server ist und läuft ok, aber

Antwort

8

Wie die Fehlermeldung sagt, kann die Wildcard Access-Control-Allow-Origin Herkunft nicht mit Access-Control-Allow-Credentials verwendet werden. Standardmäßig verwendet das Modul cors einen Ursprungsursprung, und standardmäßig benötigt socket.io Anmeldeinformationen (oder so scheint es hier jedenfalls). Was Sie tun müssen, ist die Origin Kopfzeile der Anfrage zu lesen und sie in die Access-Control-Allow-Origin der Antwort aufzunehmen.

Glücklicherweise macht cors dies sehr einfach: Um den Ursprung der Anfrage widerzuspiegeln, übergeben Sie ein Optionsobjekt mit einer origin: true Eigenschaft. Sie müssen auch eine credentials: true Eigenschaft Anmeldeinformationen überhaupt ermöglichen:

app.use(cors({ 
    origin: true, 
    credentials: true 
})); 
+0

Vielen Dank für die Antwort, jetzt ich 'Credentials Flag 'wahr' ist, aber die 'Access-Control-Allow-Credentials' Header 'ist'' –

+0

Danke dir, habe den Trick :). Ich bin neu zu diesem –

+0

Eine Frage aber, jetzt bekomme ich 404, wenn der Browser die URL aufrufen, obwohl ... Wenn ich Ihre Lösung entfernen, bekomme ich den Kors Fehler ... Es ist verwirrend ... –