[英]fns[i](socket, function(err){ TypeError: Property '0' of object [object Object] is not a function in /socket.io/lib/namespace.js:119
I am new to socket.io and node.js I refered some online documents and created a socket server, it was working fine, but now it shows so many errors, Since I don't know socket.io and node.js I am unable to rectify the problem.我是 socket.io 和 node.js 的新手我参考了一些在线文档并创建了一个套接字服务器,它工作正常,但现在它显示了很多错误,因为我不知道 socket.io 和 node.js 我是无法纠正问题。
I am receiving the following error in my server side我在服务器端收到以下错误
/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_m
/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] 是在 Namespace.run (/home/sitename/public_html/chat-server/node_modules) 上不是运行函数 (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:119:11) /socket.io/lib/namespace.js:131:3) 在 Namespace.add (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:160:8) 在客户端。在 Server.onconnection (/home/sitename/public_html/chat-server/node_modules/socket.io) 连接 (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/client.js:76:20) /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) 在 /home/sitename/public_html/chat-服务器/节点_m odules/engine.io/lib/server.js:335:12 at completeHybiUpgrade2 (/home/sitename/public_html/chat-server/node_modules/ws/lib/WebSocketServer.js:284:5)
odules/engine.io/lib/server.js:335:12 at completeHybiUpgrade2 (/home/sitename/public_html/chat-server/node_modules/ws/lib/WebSocketServer.js:284:5)
and in the client side I am receiving the following error在客户端,我收到以下错误
GET https://sitename/socket.io/?EIO=3&transport=polling&t=1483766845342-50
获取https://sitename/socket.io/?EIO=3&transport=polling&t=1483766845342-50
and和
WebSocket connection to 'wss://sitename:3000/socket.io/?EIO=3&transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
WebSocket 连接到“wss://sitename:3000/socket.io/?EIO=3&transport=websocket”失败:连接建立错误:net::ERR_CONNECTION_REFUSED
client side code客户端代码
<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'
]} );
server side code服务器端代码
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');
});
It looks to me like you probably have invalid transports specified which causes socket.io to make an error (I don't recognize transport names like htmlfile
and polling
).在我看来,您可能指定了无效的传输,这会导致 socket.io 出错(我不认识传输名称,如
htmlfile
和polling
)。
The way you know if this is the case or not is to remove all transports entirely from both client and server so you don't even specify that option.您知道是否是这种情况的方法是从客户端和服务器完全删除所有传输,因此您甚至不指定该选项。 Then you will have only the default, built-in transports (which should just be just websocket and xhr-polling).
然后你将只有默认的内置传输(应该只是 websocket 和 xhr-polling)。
You must only specify transports that you have support for and that you actually need.您必须仅指定您支持且实际需要的传输。 You cannot just make up transport names.
您不能只是编造传输名称。
let jwt = require('jsonwebtoken');
You should pass object "{ transports: [] }" into .listen func as below:您应该将对象 "{ transports: [] }" 传递到 .listen func 中,如下所示:
let io = require('socket.io').listen(server, {
transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});
into use() you can pass cb func as below:进入 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);
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.