javascript - fns[i](套接字,函数(错误){ TypeError : Property '0' of object [object Object] is not a function in/socket. io/lib/namespace.js:119

标签 javascript node.js sockets socket.io

我是socket.io和node.js的新手,我引用了一些在线文档并创建了一个套接字服务器,它工作正常,但现在它显示了很多错误,因为我不知道socket.io和node.js,所以我无法纠正问题。

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

/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:119 fns[i](socket, function(err){ ^ TypeError: Property '0' of object [object Object] is not a function at run (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:119:11) at Namespace.run (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:131:3) at Namespace.add (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:160:8) at Client.connect (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/client.js:76:20) at Server.onconnection (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/index.js:367:10) at Server.EventEmitter.emit (events.js:95:17) at Server.handshake (/home/sitename/public_html/chat-server/node_modules/engine.io/lib/server.js:310:8) at 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 at completeHybiUpgrade2 (/home/sitename/public_html/chat-server/node_modules/ws/lib/WebSocketServer.js:284:5)

在客户端我收到以下错误

GET https://sitename/socket.io/?EIO=3&transport=polling&t=1483766845342-50

WebSocket connection to 'wss://sitename:3000/socket.io/?EIO=3&transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

客户端代码

<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 出错(我无法识别 htmlfilepolling 等传输名称)。

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

您只能指定您支持且实际需要的传输。您不能只编造传输名称。

关于javascript - fns[i](套接字,函数(错误){ TypeError : Property '0' of object [object Object] is not a function in/socket. io/lib/namespace.js:119,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41518162/

相关文章:

javascript - 完整日历未在页面上显示/加载

javascript - 打开基于ajax响应的jquery-ui对话框

sockets - 使用 SSL 的点对点套接字中自签名证书的安全性

java - Android应用程序不从Socket输入流读取

javascript - 使用 onclick 调用的函数切换文本

javascript - 在javascript中用空格替换日期中的字符

javascript - Firebase 的云函数 : how to read data from Database synchronously?

javascript - 这个字符串语法在 JavaScript 中意味着什么?

javascript - 存储 firebase 数据库检索

c# - 尝试关闭事件的 TCP 连接,但出现错误