您好我正在尝试使用socket.io制作协作画布,这是我的服务器端代码
var sanitizer = require('validator').sanitize;
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server),
chat = io.of('/chat'),
canvas = io.of('/canvas')
;
function sanitize(string) {
return sanitizer(string).entityDecode()
}
app.get(/(^\/.*$)/, function(request, response) {
var fileName = request.params[0];
if (fileName == '/')
fileName = '/index.html';
response.sendFile(__dirname + '/client' + fileName);
});
io.sockets.on('connection', function(socket) {
socket.on('setName', function (name) {
name = sanitize(name);
socket.set('name', name);
socket.broadcast.emit('receive', {
sender:'Server',
message:name + ' has joined.'
})
});
socket.on('send', function (message) {
socket.get('name', function(error, name) {
if (name)
socket.broadcast.emit('receive', {
sender:name,
message:sanitize(message)
})
})
});
socket.on('draw', function (command) {
io.sockets.emit('draw', command)
});
socket.on('updateCursor', function(position) {
socket.get('name', function(error, name) {
if (name)
socket.broadcast.emit('updateCursor', {
name:name,
position:position
});
});
});
socket.on('disconnect', function() {
socket.get('name', function(error, name) {
if (name) {
socket.broadcast.emit('receive', {
sender:'Server',
message:name + ' has left.'
});
socket.broadcast.emit('removeCursor', name);
}
})
});
});
server.listen(3000, function(){
console.log('listening on *:3000');
});
但是当我尝试在localhost:3000上运行它时,我的控制台日志说了这个
C:\h>node server.js
listening on *:3000
events.js:72
throw er; // Unhandled 'error' event
^
TypeError: Object #<Socket> has no method 'set'
at Socket.<anonymous> (C:\h\server.js:26:16)
at Socket.emit (events.js:95:17)
at Socket.onevent (C:\h\node_modules\socket.io\lib\socket.js:327:8)
at Socket.onpacket (C:\h\node_modules\socket.io\lib\socket.js:287:12)
at Client.ondecoded (C:\h\node_modules\socket.io\lib\client.js:193:14)
at Decoder.Emitter.emit (C:\h\node_modules\socket.io\node_modules\socket.io-
parser\node_modules\component-emitter\index.js:134:20)
at Decoder.add (C:\h\node_modules\socket.io\node_modules\socket.io-parser\in
dex.js:247:12)
at Client.ondata (C:\h\node_modules\socket.io\lib\client.js:175:18)
at Socket.emit (events.js:95:17)
at Socket.onPacket (C:\h\node_modules\socket.io\node_modules\engine.io\lib\s
ocket.js:99:14)
我的程序终止了, 有人可以帮我这个吗?我的socket.io版本有什么问题?即时通讯使用socket.io版本1.2.1
谢谢〜
答案 0 :(得分:1)
socket.set('name', name)
将失败,因为Socket#set
方法不属于Socket.IO API。删除该行。
答案 1 :(得分:0)
您必须直接在套接字中设置name
属性。
官方文档说:
旧的 io.set()和 io.get()方法已弃用,仅支持向后兼容。以下是旧授权示例到中间件样式的翻译。
在migration guide点击。