两个nodejs服务器上的Access-Control-Allow-Origin错误

use*_*204 0 cross-domain-policy node.js socket.io

我有一个问题,从页面插件IO连接,由nodeJs服务器生成,到另一个由Socket.IO监听的nodeJs服务器

这个想法包含2个任务:由一个Express服务器生成HTML模板由另一个Express服务器支持套接字io

这是server.js代码:

const app = require('express');
const util = require('util');
const http = require('http');
const fs = require('fs');
const debug = console.log;
const moment = require('moment');
const event = require('events').EventEmitter;
var server = app();
server.use(function (req, res, next) {
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
        res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
        res.setHeader('Access-Control-Allow-Credentials', true);
        next();
    }
);
server.use(app.json());
server.use(app.urlencoded());
server.use(app.logger());
server.use(app.favicon());
server.use(app.static(__dirname + '/core'));
server.get('*', function (req, res, next) {
    debug('Connection refused: \t' + req.url);
    var r = (e.url.split('/')[2] == 'socket.io.js') ? server.st.socket : server.st.tmp; // Return TMP-HTML FILE OR SOCKET.IO JS FILE FOR CLIENT
    res.send(r);
    res.end();
});
server.st = {
        socket: fs.readFileSync('./socket.io.js', 'utf-8')
        tmp: fs.readFileSync('./tmp.html', 'utf-8')
}
server.listen(81);
*******************************************************************************
//Creating SOCKET server
    io = require('socket.io').listen(82);
    io.configure(function () {
        io.set('log level', 1);
        io.set('origin', '*');
    });
    io.sockets.on('connection', function (socket) {
        debug('IT IS WORK')
    })
Run Code Online (Sandbox Code Playgroud)

这是tmp.html代码:

<!DOCTYPE html>
<html>
<head>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:82');
    </script>
</head>
<body>
</body>
Run Code Online (Sandbox Code Playgroud)

并且默认为客户端的Socket.io.js

这是客户端的错误

XMLHttpRequest cannot load http://localhost:82/socket.io/?EIO=2&transport=polling. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:81' is therefore not allowed access. 
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

use*_*204 5

答案是:

必须支持Socket HTTP服务器,有778线(V0.9),则必须在原产地选择这样的事情写在股票套接字选项默认原点设置,不能由VAR IO configurate改变,manager.js:标题[ 'Access-Control-Allow-Origin'] ='*'; 要么

解决方案的最佳方式是:

必须支持Socket HTTP服务器,已绑定的地址与它自己的监听器,创建一个套接字beetwen客户端请求这条隧道,使用socket.io.js文件,我从本地主机获得:81 ..这就是为什么我问我自己: "为什么我从服务器获取套接字客户端文件,这与套接字服务器无关?" 并改变了

<script src="http://localhost:82/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost:82');
</script> 
Run Code Online (Sandbox Code Playgroud)

它有效.THX,来自俄罗斯的热爱.再见.