是否有"原型"连接到socket.io的所有套接字?
我想定义一些可用于每个连接套接字的函数。
目前我有:
io.sockets.on('connection', function(socket) {
//Define properties and functions for socket
socket.hello = function(){
console.log("hello from "+socket.id);
}
socket.hello();
});
但我正在定义一个新的'每个套接字的hello函数。有套接字原型吗?所以我可以有类似的东西:
Socket.prototype.hello = function(){
console.log("hello from "+socket.id);
}
io.sockets.on('connection', function(socket) {
socket.hello();
});
答案 0 :(得分:3)
虽然它似乎没有通过主require('socket.io')
提供。
目前,您必须直接require()
socket.js
来引用它:
var Socket = require('socket.io/lib/socket');
Socket.prototype.hello = function () {
console.log("hello from " + this.id);
};
注意:从
prototype
开始,您必须将该实例引用为this
。socket
变量尚不可用。此外,就像反对修改原生类型的建议一样,
Object
的{{1}} - 只有一个prototype
,因此可能会遇到多个模块碰撞试图定义同样的方法。
答案 1 :(得分:0)
使用打字稿向Socket添加功能
创建Extension.ts文件
const Socket = require('socket.io/lib/socket')
declare module 'socket.io' {
interface Socket {
getGameKey(this: typeof Socket): string
getToken(this: typeof Socket): string
}
}
function getGameKey(this: typeof Socket): string {
return this.handshake.query.gameKey
}
function getToken(this: typeof Socket): string {
return this.handshake.query.token
}
Socket.prototype.getGameKey = getGameKey;
Socket.prototype.getToken = getToken;
然后将扩展文件导入需要访问新添加的方法(即getToken和getGameKey)的位置
import './Extension'
io.on("connection", socket => {
console.log("Game key "+socket.getGameKey())
console.log("Token "+socket.getToken())
})