Javascript 对象[object object]的fns[i](套接字,函数(err){TypeError:Property';0';不是/socket.io/lib/namespace.js:119中的函数

Javascript 对象[object object]的fns[i](套接字,函数(err){TypeError:Property';0';不是/socket.io/lib/namespace.js:119中的函数,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我不熟悉socket.io和node.js我参考了一些在线文档并创建了一个socket服务器,它工作正常,但现在它显示了很多错误,因为我不知道socket.io和node.js,所以我无法纠正这个问题 我在服务器端收到以下错误 /home/sitename/public_html/chat server/node_modules/socket.io/lib/namespace.js:119 fns[i](插座,功能(错误){ ^TypeError:对象[object]的属性“0”不是函数 运行时

我不熟悉socket.io和node.js我参考了一些在线文档并创建了一个socket服务器,它工作正常,但现在它显示了很多错误,因为我不知道socket.io和node.js,所以我无法纠正这个问题

我在服务器端收到以下错误

/home/sitename/public_html/chat server/node_modules/socket.io/lib/namespace.js:119 fns[i](插座,功能(错误){ ^TypeError:对象[object]的属性“0”不是函数 运行时(/home/sitename/public_html/chat server/node_modules/socket.io/lib/namespace.js:119:11) 在Namespace.run(/home/sitename/public_html/chat server/node_modules/socket.io/lib/Namespace.js:131:3) 在Namespace.add(/home/sitename/public_html/chat server/node_modules/socket.io/lib/Namespace.js:160:8) 在Client.connect(/home/sitename/public_html/chat server/node_modules/socket.io/lib/Client.js:76:20) 在Server.onconnection(/home/sitename/public_html/chat Server/node_modules/socket.io/lib/index.js:367:10) 在Server.EventEmitter.emit上(events.js:95:17) 在Server.handshake(/home/sitename/public_html/chat Server/node_modules/engine.io/lib/Server.js:310:8) 在Server.onWebSocket(/home/sitename/public_html/chat Server/node_modules/engine.io/lib/Server.js:392:10) at/home/sitename/public_html/chat server/node_modules/engine.io/lib/server.js:335:12 在completeHybiUpgrade2(/home/sitename/public_html/chat server/node_modules/ws/lib/WebSocketServer.js:284:5)

在客户端,我收到以下错误

得到

WebSocket连接到 'wss://sitename:3000/socket.io/?EIO=3&transport=websocket'失败: 建立连接时出错:net::ERR\u连接被拒绝

客户端代码

<script src="https://cdn.socket.io/socket.io-1.3.2.js"></script>

  var socket = io();

    var socket = io.connect( 'https://sitename:3000',{secure: true,
'sync disconnect on unload': true,'reconnect': true,
  'reconnection delay': 500, rejectUnauthorized: false ,   transports: [
    'websocket', 
    'flashsocket', 
    'htmlfile', 
    'xhr-polling', 
    'jsonp-polling', 
    'polling'
  ]} );
var fs = require('fs');
var app = require('express')();
var https = require('https');
var options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./certificate.crt')
};
var server = https.createServer(options, app);
//var io = require('socket.io')(server);
var io = require('socket.io').listen(server);
var socket = io.use({
  transports: [
    'websocket', 
    'flashsocket', 
    'htmlfile', 
    'xhr-polling', 
    'jsonp-polling', 
    'polling'
  ]
});



var clients=[];
var gamename={};
var socketid={};


app.use(function (req, res, next) {

    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', 'https://sitename:3000');

    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', true);

    // Pass to next layer of middleware
    next();
});


app.get('/', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){

});

server.listen(3000, function(){

  console.log('It is Listening on *:3000');
});

在我看来,您可能指定了无效的传输,这导致socket.io出错(我无法识别像
htmlfile
polling
这样的传输名称)

您知道是否存在这种情况的方法是完全从客户端和服务器中删除所有传输,这样您甚至不指定该选项。然后您将只有默认的内置传输(应该只是websocket和xhr轮询)


您必须只指定您支持的和实际需要的传输。您不能只指定传输名称。

在我看来,您可能指定了无效的传输,这会导致socket.io出错(我无法识别传输名称,如
htmlfile
轮询

let jwt = require('jsonwebtoken');
您知道是否存在这种情况的方法是完全从客户端和服务器中删除所有传输,这样您甚至不指定该选项。然后您将只有默认的内置传输(应该只是websocket和xhr轮询)

您必须只指定您支持的和实际需要的传输。您不能只编传输名称

let jwt = require('jsonwebtoken');
您应该将对象“{transports:[]}”传递到.listen func中,如下所示:

let io = require('socket.io').listen(server, {
    transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});
into use()您可以按如下方式传递cb func:

io.use(async (socket, next) => {
    const {
        handshake: {
            query
        }
    } = socket;
    if (query && .query.token){
        jwt.verify(query.token, 'SECRET_KEY', function(err, decoded){
          if(err) return next(new Error('Authentication error'));
          socket.decoded = decoded;
          next();
       });
    } else {
      next(new Error('Authentication error'));
    }    
})
 .on('connection', (socket) => {
    // emit ot listen socket
    socket.on('message', (message) => {
       console.log('=================== ', message);
 })
});
您应该将对象“{transports:[]}”传递到.listen func中,如下所示:

let io = require('socket.io').listen(server, {
    transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});
into use()您可以按如下方式传递cb func:

io.use(async (socket, next) => {
    const {
        handshake: {
            query
        }
    } = socket;
    if (query && .query.token){
        jwt.verify(query.token, 'SECRET_KEY', function(err, decoded){
          if(err) return next(new Error('Authentication error'));
          socket.decoded = decoded;
          next();
       });
    } else {
      next(new Error('Authentication error'));
    }    
})
 .on('connection', (socket) => {
    // emit ot listen socket
    socket.on('message', (message) => {
       console.log('=================== ', message);
 })
});

我猜你的一个传输无效。你可以试着把它们全部删除,除了
websocket
,看看你学到了什么。@jfriend00谢谢你的时间。我必须把它添加到服务器端还是客户端吗?@jfriend00在服务器中仍然存在同样的问题,我想说的是从两个clie中完全删除所有传输nt和服务器,所以您有一个默认实现(应该是websocket和xhr轮询)看看问题是否仍然存在。为什么要添加这么多传输?还有,什么是
htmlfile
polling
传输?你不能只编造实现中不支持的传输名称。@jfriend00谢谢兄弟,我会试试。我会冒险猜测你的一个传输无效。Y除了
websocket
之外,您可以尝试将它们全部删除,看看您是否学到了什么。@jfriend00谢谢您的时间。我必须将其添加到服务器端还是客户端吗?@jfriend00在服务器中仍然存在相同的问题,我想说,完全从客户端和服务器中删除所有传输,这样您就有了一个默认实现(应该是websocket和xhr轮询)看看问题是否仍然存在。为什么要添加这么多传输?还有,什么是
htmlfile
polling
传输?你不能只编造实现中不支持的传输名称。@jfriend00谢谢兄弟,我会试试。我无法升级投票,它会变为零automatically@scriptkiddie1-你需要15的声望才能投票。你可以查看特权列表和他们获得的声望点数,还可以查看你在各种活动中获得的声望。看起来你刚刚获得了7分,5分是对你的问题投票,2分是接受答案。我无法投票,它变为0oautomatically@scriptkiddie1-你需要15的声望才能提升投票。你可以查看特权列表和他们获得的声望点数,还可以查看你在各种活动中获得的声望。看起来你刚刚获得了7分,对你的问题进行提升投票5分,接受回答2分。