javascript - 类型错误 : Object #<Socket> has no method 'set'

标签 javascript node.js socket.io

嗨,我正在尝试使用 socket.io 制作协作 Canvas ,这是我的服务器端代码

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

谢谢~

最佳答案

socket.set('name', name)

将会失败,因为 Socket#set 方法不是 Socket.IO API 的一部分。删除该行。

关于javascript - 类型错误 : Object #<Socket> has no method 'set' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289240/

相关文章:

node.js - Socket.io 检测客户端何时断开连接

javascript - 如何在 C# 中单击带有 Selenium 的 JS 链接

javascript - 如何在 window.location 之前显示 msg 2 秒

javascript - 带标记的 OSM 折线

node.js - 无法在 OSx 上解压缩 Node 存档器生成的文件

使用 Socket.IO 到 nodeJS 服务器的 Python 客户端

javascript - 在套接字 io 上使用 Node 请求库时出错

javascript - 使整个 div(包括文本)可点击

node.js - cron 作业的 Spotify API 授权

javascript - express 发送文件错误404未找到