首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Node.js和Socket.io获取缺少错误处理程序套接字消息

使用Node.js和Socket.io获取缺少错误处理程序套接字消息
EN

Stack Overflow用户
提问于 2015-07-31 12:03:35
回答 2查看 12.9K关注 0票数 4

您好,我得到了以下使用Node.js和socket.io运行服务器的错误。

错误:

代码语言:javascript
复制
Missing error handler on `socket`.
TypeError: Cannot read property 'connected' of undefined
    at Socket.<anonymous> (C:\Documents and Settings\Subhrajyoti\Desktop\Restore
\htdocs\video broadcast\server.js:68:13)
    at Socket.emit (events.js:95:17)
    at Socket.onevent (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\htd
ocs\video broadcast\node_modules\socket.io\lib\socket.js:330:8)
    at Socket.onpacket (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\ht
docs\video broadcast\node_modules\socket.io\lib\socket.js:290:12)
    at Client.ondecoded (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\h
tdocs\video broadcast\node_modules\socket.io\lib\client.js:193:14)
    at Decoder.Emitter.emit (C:\Documents and Settings\Subhrajyoti\Desktop\Resto
re\htdocs\video broadcast\node_modules\socket.io\node_modules\socket.io-parser\n
ode_modules\component-emitter\index.js:134:20)
    at Decoder.add (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\htdocs
\video broadcast\node_modules\socket.io\node_modules\socket.io-parser\index.js:2
47:12)
    at Client.ondata (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\htdo
cs\video broadcast\node_modules\socket.io\lib\client.js:175:18)
    at Socket.emit (events.js:95:17)
    at Socket.onPacket (C:\Documents and Settings\Subhrajyoti\Desktop\Restore\ht
docs\video broadcast\node_modules\socket.io\node_modules\engine.io\lib\socket.js
:99:14)

我的服务器端代码如下所示。

Server.js:

代码语言:javascript
复制
var port=8888;
var express=require('express');
var morgan = require('morgan');
var http=require('http');
var bodyParser= require('body-parser');
var methodOverride = require('method-override');
var mongo = require('mongojs');
var database='Oditek';
var collections=['video'];
var app= express();
var server=http.Server(app);
var io=require('socket.io')(server);
var db = mongo.connect("127.0.0.1:27017/"+database, collections);
app.use(express.static(__dirname + '/public'));     // set the static files location /public/img will be /img for users
app.use(morgan('dev'));                     // log every request to the console
app.use(bodyParser.urlencoded({ extended: false }))    // parse application/x-www-form-urlencoded
app.use(bodyParser.json())    // parse application/json
app.use(methodOverride());                  // simulate DELETE and PUT
db.on('ready', function () {
    console.log('database connected')
});
app.get('/',function(req,res){
    res.sendfile('view/login.html');
});
app.post('/login',function(req,res){
    var username=req.body.username;
    var password=req.body.userpassword;
    if(username && password){
        db.video.findOne({
            username:username,
            password:password
        },function(err,doc){
            if(doc){
                console.log('login',doc);
                res.send(doc);
            }
            if(err){
                console.log('login12',err);
                res.send("could not login");
            }
        });
    }
});
app.get('/video',function(req,res){
    res.sendfile('view/video.html');
});

//socket----programming//
var roomid;
var clients={};
io.sockets.on('connection',function(socket){
    //console.log(socket);
    roomid=socket.handshake.query.roomid;
    var usertype=socket.handshake.query.usertype;
    socket.on('admin-join',function(data){
        console.log('admin',data);
        if(data.IsJoinAdmin){
            clients={
                "socket":roomid
            }
            socket.join(roomid);
        }
    });
    socket.on('user-join',function(data){
        console.log('user',data);
        if(data.isUserJoin){
            io.socket.connected[clients.socket].emit('user-already-joined',data);
            socket.join(roomid);
        }
    });
    socket.on('send-broadcasting-message',function(data){
        console.log('message',data)
        io.to(roomid).emit('sending-broadcasting',data);
    });

});
server.listen(port);
console.log('server is listening on the port'+port);

我在本行收到错误,我正在使用io.socket.connected[clients.socket].emit('user-already-joined',data);.This行向特定的user.Please发送私人消息,帮助我解决此错误。

EN

回答 2

Stack Overflow用户

发布于 2015-07-31 14:28:52

引发错误是因为io对象没有属性socket,但它具有属性sockets。所以你应该这样写:

代码语言:javascript
复制
io.sockets.connected[clients.socket].emit('user-already-joined',data);

如果您使用socket.io 1.0,则有更好的方法来完成此操作。每个socket通过自己的id自动加入一个默认房间。

因此,您可以使用以下代码通过id将其发送到套接字:

代码语言:javascript
复制
io.to(clients.socket).emit('user-already-joined',data);
票数 0
EN

Stack Overflow用户

发布于 2015-08-26 21:41:03

查看server.js上的第68行并对其进行注释,您将看到您使用的是在socket作用域中定义的公式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31737875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档