类型错误:对象 #<套接字> 没有方法“设置”
TypeError: Object #<Socket> has no method 'set'
嗨,我正在尝试与 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');
});
但是当我尝试在本地主机: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 版本有什么问题吗?IM 使用 socket.io 版本 1.2.1
谢谢~
socket.set('name', name)
将失败Socket#set
因为该方法不是 Socket.IO API 的一部分。删除该行。
您必须直接在套接字中设置 name
属性。
官方文档 说:
旧的 io.set() 和 io.get() 方法已被弃用,仅支持向后兼容。下面是一个旧授权示例到中间件风格的翻译。
在迁移指南中战利品。
相关文章:
- 是否有任何设置阻止JavaScript在系统上工作
- 如何将类方法设置为等于多个函数?-Javascript
- 如何使用setVisible()方法设置json模型中元素的可见属性
- 为node.js中的方法设置before/after钩子
- 为什么dijit.form.Select有方法setStore(),而dijit.fform.FilteringSele
- Javascript继承:从超类的方法设置子类的属性
- 使用 jquery ajax 上传文件的数据方法设置
- JS使用不同的方法设置点击属性
- 为流星方法设置 cron 作业
- 在Internet Explorer中从javascript打印方法设置pdf的文件名不起作用
- 类型错误:对象 #<套接字> 没有方法“设置”
- 将 jquery remove 方法设置为动画完成时的回调不起作用
- 主干.js:未捕获类型错误:对象 [对象数组] 没有方法“设置”
- 有没有办法为之前卸载方法设置例外
- JSPM-是否有方法或需要对捆绑文件进行版本化
- 为什么使用jQuery设置属性会得到与使用DOM方法设置不同的结果呢
- 当用户试图删除indexedDB数据库时,是否有方法执行函数
- Box2dWeb中是否有方法将对象的位置.x输出到console.log()
- 使用.html()方法设置javascript
- 是否有方法在WebCrypto API中获取RSA密钥的组件