2015-07-20 10 views
6

Ich habe vor kurzem angefangen, node.js und socket.io zu lernen. Ich folgte einem einfachen Tutorial, das socket.io hatte und alles lief gut, während es auf meinem Computer lief. Ich entschied mich jedoch, den Client-Teil zum Testen auf einen Server hochzuladen, und damit begannen die Probleme. Ich möchte den Chat-Client auf einem Webhost ausführen und den Server auf meinem Computer oder einem anderen Host ausführen. Grundsätzlich plane ich die Portweiterleitung des Servers und die Ausführung des Clients auf einer Webseite. Ich öffnete meinen Port nach vorne und es scheint zu funktionieren, aber ich bekomme den Fehler auf der Webseite jedes Mal.CORS Blockiert mit node.js und socket.io

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://24.151.51.34:3000/socket.io/?EIO=3&transport=polling&t=1437399007343-0. (Reason: CORS request failed). 

Ich habe Herumspiele heraus ich einen Weg kann aber nicht mein eigenes Projekt mit dem Code in der Hoffnung, eine Lösung für dieses Problem zu finden, vor dem Start. Der Client-Code ist:

<!doctype html> 
<html> 
    <head> 
    <title>Socket.IO chat</title> 
    <style> 
     * { margin: 0; padding: 0; box-sizing: border-box; } 
     body { font: 13px Helvetica, Arial; } 
     form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } 
     form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } 
     form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; } 
     #messages { list-style-type: none; margin: 0; padding: 0; } 
     #messages li { padding: 5px 10px; } 
     #messages li:nth-child(odd) { background: #eee; } 
    </style> 
    </head> 
    <body> 
    <ul id="messages"></ul> 
    <form action=""> 
     <input id="m" autocomplete="off" /><button>Send</button> 
    </form> 
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script> 
    <script> 
     var socket = io('24.151.51.34:3000'); 
     $('form').submit(function(){ 
     socket.emit('chat message', $('#m').val()); 
     $('#m').val(''); 
     return false; 
     }); 
     socket.on('chat message', function(msg){ 
     $('#messages').append($('<li>').text(msg)); 
     }); 
    </script> 
    </body> 
</html> 

Für den Server-Code Ich habe versucht, Code hinzuzufügen CORS zuzulassen, aber wirklich nicht sicher, was zu tun ist:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

io.set('origins', 'http://browsercombat.com:80'); 

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

app.get('/', function(req, res, next) { 
    res.sendFile(__dirname + '/index.html'); 
}); 

app.post('/', function(req, res, next) { 
    // Handle the post for this route 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 
    io.emit('chat message', msg); 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 
+0

Was genau ist 'myip'? – Bergi

+0

Ah, vergaß zu erwähnen, dass ich Portweiterleitung war, die es mit meiner IP-Verbindung verband, entschied ich mich dafür, es durch "myip" zu ersetzen. – uncoded

+0

CORS-Codebeispiele für Express und socket.io: http://enable-cors.org/server_expressjs.html und http://stackoverflow.com/questions/24058157/socket-io-node-js-cross-origini- Anfrage blockiert. – jfriend00

Antwort

Verwandte Themen