我完全是Node.js的新手,我只是想讓一些示例代碼運行,但是我一直遇到與CORS相關的問題。CORS Node.js服務器
Server.js
var http = require('http');
var io = require('socket.io');
server = http.createServer(function(req, res){
});
server.listen(8080);
// socket.io
var socket = io.listen(server, { origins: '*:*' });
// Enables CORS
var enableCORS = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content- Length, X-Requested-With');
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
// enable CORS!
socket.use(enableCORS);
//--------------
socket.on('connection', function(client){
client.on('message', function(msg){
socket.broadcast(msg);
})
});
客戶端代碼:
var socket = io.connect('127.0.0.7:8080');
socket.on('message', function(msg){
alert(msg);
console.log(msg);
});
我嘗試安裝於Node.js的CORS模塊,但我不斷收到在Firefox調試器的消息,但我仍然不斷收到這樣的:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://8080/socket.io/1/?t=1400151675528. This can be fixed by moving the resource to the same domain or enabling CORS.
ReferenceError: socket is not defined client2.html:8
ReferenceError: socket is not defined
是被同一主機和端口的節點服務器上投放了您的客戶端代碼?如果沒有,請嘗試使用節點服務器爲您的客戶端代碼提供服務,以便使用相同的主機和端口。那麼你不應該有這個問題,因爲CORS不適用。另外,它看起來像你沒有框架使用原始節點。使用諸如Express.js(一個非常簡單的框架)之類的東西可以使服務靜態文件變得簡單(以及其他一些重要的事情)。對不起,如果我不直接回答你的問題。我不是CORS專家。但我喜歡Node,並想給你一些好的入門建議。祝你好運。 –
服務器正在監聽8080,並且客戶端代碼正在監聽127.0.0.7:8080 – Seth
127.0.0.1:8080 =/= 127.0.0.7:8080 ...因此,問題在於此問題。我的建議是花半小時學習Express並使用一臺服務器。否則,請了解HTTP頭以禁用CORS並手動設置它們。 –