Node.js TypeError:io.sockets.clients不是函数

Node.js TypeError:io.sockets.clients不是函数,node.js,socket.io,Node.js,Socket.io,我在这一步遵循教程(第7步)。 我成功地安装了node.js和socket.js,但是当我转到页面并尝试发送图像时,我在服务器上发现了这个错误 Missing error handler on `socket`. TypeError: io.sockets.clients is not a function at Socket.<anonymous> (C:\Users\utente\Projects\webrtc\server.js:30:31) at emitOne (event

我在这一步遵循教程(第7步)。 我成功地安装了node.js和socket.js,但是当我转到页面并尝试发送图像时,我在服务器上发现了这个错误

Missing error handler on `socket`.
TypeError: io.sockets.clients is not a function
at Socket.<anonymous> (C:\Users\utente\Projects\webrtc\server.js:30:31)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at Socket.onevent (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\socket.js:330:8)
at Socket.onpacket (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\socket.js:290:12)
at Client.ondecoded (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\client.js:193:14)
at Decoder.Emitter.emit (C:\Users\utente\Projects\webrtc\node_modules\socket.io\node_modules\socket.io-parser\node_modules\component-emitter\index.js:134:20)
at Decoder.add (C:\Users\utente\Projects\webrtc\node_modules\socket.io\node_modules\socket.io-parser\index.js:247:12)
at Client.ondata (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\client.js:175:18)
at emitOne (events.js:77:13)
index.html是

<!DOCTYPE html>
<html>
<head>
    <meta name="keywords" content="JavaScript, WebRTC" />
    <meta name="description" content="WebRTC codelab" />
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1">

    <title>WebRTC codelab: step X</title>
    <link rel="stylesheet" href="css/main.css">
</head>
<body>
    <h1>WebRTC codelab: step X</h1>

    <p>
        Room URL: <br>
        <code id="url">...</code>
    </p>

    <video class="camera" autoplay></video>
    <div class="controls">
        <canvas id="photo" style="width: 200px; height: 150px; border: 1px solid #ccc;"></canvas>
        <p>
            <button id="snap">snap</button>-then-<button id="send">send</button> 
            <br> - or - <br>
            <button id="snapAndSend">snap & send</button>
        </p>
    </div>

    <div class="incoming">
        <h2>Incoming photos</h2>
        <div id="trail"></div>
    </div>

    <script src="node_modules\socket.io\node_modules\socket.io-client\socket.io.js"></script>
    <script src="js/lib/adapter.js"></script>
    <script src="js/main.js"></script>

</body>

WebRTC代码实验室:步骤X
WebRTC代码实验室:步骤X

房间URL:

抓拍然后发送
-或-
捕捉并发送

收到的照片

有什么帮助吗

非常感谢


带io.sockets.clients[room]。长度;我解决了这个错误,但现在我明白了

Missing error handler on `socket`.
TypeError: Cannot read property '8a675bfe1203e' of undefined
at Socket.<anonymous> (C:\Users\utente\Projects\webrtc\server.js:30:38)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at Socket.onevent (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\socket.js:330:8)
at Socket.onpacket (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\socket.js:290:12)
at Client.ondecoded (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\client.js:193:14)
at Decoder.Emitter.emit (C:\Users\utente\Projects\webrtc\node_modules\socket.io\node_modules\socket.io-parser\node_modules\component-emitter\index.js:134:20)
at Decoder.add (C:\Users\utente\Projects\webrtc\node_modules\socket.io\node_modules\socket.io-parser\index.js:247:12)
at Client.ondata (C:\Users\utente\Projects\webrtc\node_modules\socket.io\lib\client.js:175:18)
at emitOne (events.js:77:13)
在“套接字”上缺少错误处理程序。
TypeError:无法读取未定义的属性“8a675bfe1203e”
在插座上。(C:\Users\utenet\Projects\webrtc\server.js:30:38)
在emitOne(events.js:77:13)
位于Socket.emit(events.js:169:7)
位于Socket.onevent(C:\Users\utete\Projects\webrtc\node\u modules\Socket.io\lib\Socket.js:330:8)
位于Socket.onpacket(C:\Users\utete\Projects\webrtc\node\u modules\Socket.io\lib\Socket.js:290:12)
在Client.ondecode(C:\Users\utete\Projects\webrtc\node\u modules\socket.io\lib\Client.js:193:14)
在Decoder.Emitter.emit(C:\Users\utete\Projects\webrtc\node\u modules\socket.io\node\u modules\socket.io解析器\node\u modules\component Emitter\index.js:134:20)
在Decoder.add(C:\Users\utete\Projects\webrtc\node\u modules\socket.io\node\u modules\socket.io parser\index.js:247:12)
在Client.ondata(C:\Users\utete\Projects\webrtc\node\u modules\socket.io\lib\Client.js:175:18)
在emitOne(events.js:77:13)

根据日志所述,在第30行抛出错误:
var numClients=io.sockets.clients(room.length)

原因是方法
io.sockets.clients(room)不再适用于socket.io v1.0+

您可以通过调用以下命令获取客户端列表:

var clientsList = io.sockets.adapter.rooms[room];
var numClients = clientsList.length;

您只需将代码行更改为

var numClients=io.sockets.adapter.rooms[room]=未定义?Object.key(io.sockets.adapter.rooms[room])。长度:0;

如果将依赖项更新为最新版本,则会出现此问题:

"dependencies": {
    "mime": "^1.3.4",
    "socket.io": "^1.4.5"
}
而如果您使用本书指定的依赖项,则它可以正常工作

"dependencies": {
   "socket.io": "~0.9.6",
    "mime": "~1.2.7"
}
我在NodeJs in action一书中查看了这个示例,当然,如果您使用最新版本的socket.io,它将不起作用,您将有以下两行代码来让它工作:

发件人:

致:

和来自:

socket.emit('rooms', io.sockets.manager.rooms);
致:


你好

与io.sockets.clients[room].长度可能重复的;我解决了错误,但现在我在
socket
上得到了丢失的错误处理程序。TypeError:无法读取套接字处未定义的属性“8a675bfe1203e”。(C:\Users\utente\Projects\webrtc\server.js:30:38)哦,哇,这篇文章已经公开很久了。嘿@elgeko因为我的建议帮助你修复了原始问题中的错误,你介意选择它作为问题的答案吗。这将对我和其他开发者有很大帮助!谢谢
var usersInRoom = io.sockets.clients(room);
var usersInRoom = io.of('/').in(room).clients;
socket.emit('rooms', io.sockets.manager.rooms);
socket.emit('rooms', io.of('/').adapter.rooms);