2017-03-23 3 views
0

Ich habe eine Front-End-angularJS-Anwendung (Client) in Apache-Server arbeiten und seine API-Aufrufe an eine Back-End-Anwendung (Server) in NodeJS gesendet werden. Jetzt möchte ich eine Socket-Verbindung zwischen dem Client und dem Server haben. Ich benutze Cors Npm-Modul für Cross-Domain-Problem, aber es funktioniert nicht.Socket.io Cross-Domain-Problem

Ich habe mehrere Lösungen diesbezüglich gesehen, aber keiner von ihnen funktioniert für mich.

Hier ist meine Server-Seite Code:

var cors = require('cors') 
var app = express(); 
var http = require('http'); 

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


var server = http.createServer(app); 
var io = require('socket.io')(server); 
io.on('connection', function(socket) 
{ 
console.log(":::::::::::::::::::::SOCKET:::::::::::::::::::::") 

socket.on('message', function(data) { 
    console.log(data); }) 
}); 

Der Server bei http://localhost:8000/

arbeitet mein Client-Seite Code Hier ist:

function socket() { 
     var socket = io.connect('http://localhost:8000/'); 
    return { 
    on: function(eventName, callback) { 
     socket.on(eventName, callback); 
    }, 
    emit: function(eventName, data) { 
     socket.emit(eventName, data); 
    }, 
    getSocket: function() { 
     return socket; 
    }, 
    removeAllListeners: function() { 
     socket.removeAllListeners(); 
    } 
    }; 
    } 

habe ich die oben Fabrik in AngularJS und nannte es innerhalb einer Funktion, wie unten gezeigt:

var socket=PermitFactory.socket(); 
socket.emit('message', 'ssss'); 

Der Fehler, den ich in der Browser-Konsole erhalten ist:

pfannen io.js: 4948 GET http://localhost:8000/socket.io/?EIO=3&transport=polling&t=LhvWuIr 404 (nicht gefunden)

Und in der Server-Konsole:

GET /socket.io /? EIO = 3 & transport = polling & t = LhvUygM 404 18.881 ms - 1153

Bitte Hilfe !!!

+0

hat Ihr Fehler irgendetwas über CORS in der Konsole sagen ?? –

+0

Nein. Der einzige Fehler in der Backend-Konsole ist ==> GET /socket.io/?EIO=3&transport=polling&t=LhvhEJB 404 3.971 ms - 1153 –

Antwort

0

zulassen Kreuz Domain auf Ihrem Server Side Scripting, legte es auf app.js

//Access-Control-Allow-Origin 
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, Authorization"); 
    res.header("Access-Control-Allow-Credentials",true); 
    res.header("Access-Control-Allow-Methods","POST,GET,OPTIONS"); 
    next(); 
}); 

app.use(cors()); 

Plugin für Google Chrome erlauben cros Herkunft

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

+0

Vielen Dank. Aber jetzt hat sich das Problem geändert :==> XMLHttpRequest kann http: // localhost: 8000/socket.io /? EIO = 3 & transport = polling & t = LhvZzwR nicht laden. Ein Platzhalter '*' kann nicht im Header 'Access-Control-Allow-Origin' verwendet werden, wenn das Credentials-Flag wahr ist. Origin 'http: // localhost' ist daher nicht erlaubt. Der Anmeldeinformationsmodus einer XMLHttpRequest wird durch das Attribut withCredentials gesteuert. –

1

Sie bekommen 404 (Not Found) dieses Mittel das problem ist in deiner url nicht cors.

http://localhost:8000/ ist der Server auf ?? der Socket-Server .. wenn ja dann wss und ws vor der wss://localhost:8000/ oder wss://localhost:8000/

+0

Ja, der Server ist aktiv. Ich versuchte, http mit wss zu ersetzen .. Aber nicht funktioniert –

+0

Sie erhalten 404, das bedeutet URL ist nicht verfügbar .. Socket-Server ist nicht aktiviert oder so etwas –