2

我有两个 socket.io 服务器在我的 node.js 项目上监听两个不同的端口。我将它们作为这样的 http 服务器运行。

我的服务器文件:

var  server = require('http').createServer(app);

//server port are 5000
var io = require('socket.io').listen(server);

var io3 = require('socket.io').listen(5132);

在我的第一个客户端页面 /usrlist

var socket = io.connect('http://localhost:5000',{
    reconnection: true,
    reconnectionDelay: 5000,
    reconnectionAttempts: 12
});

在我的客户端页面/playingroom

var socket = io.connect('http://localhost:5132');

然后我决定使用 https 使我的连接安全,所以我将代码更改为此

我的服务器文件:

const cors = require('cors');
app.use(cors({credentials: true, origin: true}));

var httpsOptions = {
    key: fs.readFileSync('./app/certsandkeys/nwcertandkey/my-prvkey.pem'),
    cert: fs.readFileSync('./app/certsandkeys/nwcertandkey/my-pubcert.pem')
};    
var sctio = require('https').createServer(httpsOptions, app);
sctio.listen(443);

var sctio3 = require('https').createServer(httpsOptions, app);
sctio3.listen(5132);

//using the default port 443 instead of the port 5000

var io = require('socket.io').listen(sctio);    
var io3 = require('socket.io').listen(sctio3);

在我的第一个客户端页面 /usrlist

var socket = io.connect('https://localhost',{
    secure: true,
    reconnection: true,
    reconnectionDelay: 5000,
    reconnectionAttempts: 12
});

在我的客户端页面/playingroom

var socket = io.connect('https://localhost:5132',{secure: true});

然后在运行我的代码之后,我的 javascript 代码开始给我一个错误,说我有未定义的 var,但我的 javascript 代码在从 http 更改为 https 之前运行良好,我测试了数百次,我确定我所有包含的文件 url 都已编辑从http到https,我的页面可以完美阅读,但我不知道为什么我的一个var只给我undefined,除了我的socket.io代码之外没有改变任何东西

更新:

今天运行我的代码 agian 之后,代码运行良好一次然后错误又回来了 agian 然后错误开始以随机方式来来去去????

错误按摩:

> jQuery.Deferred exception: $usercolor is not defined
> MakeMove@https://localhost/cssFiles/js/makemove.js:170:4
> CheckResult@https://localhost/cssFiles/js/guiMultiPlayer.js:62:9
> CheckAndSet@https://localhost/cssFiles/js/guiMultiPlayer.js:183:6
> NewGame@https://localhost/cssFiles/js/guiMultiPlayer.js:764:3
> @https://localhost/cssFiles/js/main.js:9:2
> e@https://localhost/js/jquery.min.js:2:29453
> l/</t<@https://localhost/js/jquery.min.js:2:29755  undefined
> jquery.min.js:2:31008

我在服务器上的邮政编码部分:

app.post('/getcolor', function (req, res, next) {
    var lCol="";    

    if(req.body.MoveString !== null){
        Move.setMoveUserId(req.user.id);
        a.getColor(req.user.id,function(col){
            res.json({"msg": col, "loggedin": "true"}); // <=== here you have a defined lCol             
        });
    } else {
        var output = {"msg": lCol, "loggedin": "true"}; // <=== here lCol always equals ""
        res.json(output);
    }
});

javascript邮政编码:

function UserColor() { // Is used to check which color the opponent has
    var MoveString = BoardToFen();
    $.ajax({
        type:'POST',
        url:'/getcolor',
        data:{MoveString:MoveString},
        dataType:'json',
        cache: false,
        success:function(data){
            if (data.msg == "white"){
                $usercolor=0;
                console.log("usercolorusercolor",$usercolor);
            } else{
                console.log("thrusercolorusercolor",$usercolor);
                $usercolor=1;
            }
        }
    });
    return $usercolor;
}

我希望任何愿意回答的人在将我的连接从 http socket.io 转换为 https 安全连接之前解释为什么我的代码工作正常,但是在转换之后我开始得到这个错误?

4

2 回答 2

0

正如评论中已经解释的那样,您在设置变量 $usercolor 时遇到问题。

但是如果你说从http切换到https之后出现了问题,那么问题很可能是你的ajax调用中的'success'回调没有被触发了

Ajax 成功事件不起作用

编辑

UserColor 函数支持异步和 ajax 调用中的“错误”回调以记录网络错误。

function UserColor(callback) { // Is used to check which color the opponent has
  var MoveString = BoardToFen();
  $.ajax({
    type:'POST',
    url:'/getcolor',
    data:{MoveString:MoveString},
    dataType:'json',
    cache: false,
    success:function(data){
      if (data.msg == "white"){
        $usercolor=0;
      } else{
        $usercolor=1;
      }
      console.log("usercolorusercolor",$usercolor);
      callback(null,$usercolor);
    },
    error:function(err) {
      console.error(err);
      callback(err);
    }
  }); 
}
于 2019-09-11T07:40:45.447 回答
0

根据报错文字,问题不在socket.io。错误是您在没有 var/let/const 语句的情况下定义了变量 $usercolor。默认情况下 js 代码以“严格模式”执行,因此您需要使用 var/let/const 语句

于 2019-09-04T16:43:20.553 回答