2017-03-23 102 views
0

我有一個前端angularJS應用程序(客戶端)在Apache服務器中工作,其API調用發送到在NodeJS中運行的後端應用程序(服務器)。現在我想在客戶端和服務器之間建立一個套接字連接。 我使用cors npm模塊進行跨域問題,但它不起作用。Socket.io跨域問題

我已經看到了幾個解決方案,但他們都沒有爲我工作。

這裏是我的服務器端代碼:

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); }) 
}); 

服務器工作在http://localhost:8000/

這裏是我的客戶端代碼:

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(); 
    } 
    }; 
    } 

我angularJS創建的上述工廠將其稱爲內部函數,如下所示:

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

我在瀏覽器控制檯得到的錯誤是:

插座io.js:4948 GET http://localhost:8000/socket.io/?EIO=3&transport=polling&t=LhvWuIr 404(未找到)

而在服務器控制檯:

GET /socket.io ?/ EIO = 3 &運輸=輪詢& T = LhvUygM 404 18.881毫秒 - 1153

請幫助!

+0

你的錯誤在控制檯上說了CORS的任何內容? –

+0

否。後臺控制檯中唯一的錯誤是==> GET /socket.io/?EIO=3&transport=polling&t=LhvhEJB 404 3.971 ms - 1153 –

回答

0

允許跨域您服務器端腳本,把它放在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()); 

插件谷歌瀏覽器允許的CRO起源

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

+0

謝謝。但是現在這個問題改變了==> XMLHttpRequest無法加載http:// localhost:8000/socket.io /?EIO = 3&transport = polling&t = LhvZzwR。當憑證標誌爲真時,'Access-Control-Allow-Origin'標頭中不能使用通配符'*'。因此不允許Origin'http:// localhost'訪問。 XMLHttpRequest的憑證模式由withCredentials屬性控制。 –

1

你正在404 (Not Found)這個手段問題是你的網址不是cors。

http://localhost:8000/是服務器嗎?插槽服務器..如果是的話wssws之前的wss://localhost:8000/wss://localhost:8000/

+0

是服務器啓動。我試圖用wss替換http ..但是不能正常工作 –

+0

你得到404這意味着url不可用.. socket服務器沒有啓用或者某些東西 –