简体   繁体   English

socket.io TypeError:socket.on不是函数

[英]socket.io TypeError: socket.on is not a function

I am developing a node app using express which has a chatting system and I am using socket.io but I get this error 我正在开发一个节点应用程序使用快递,它有一个聊天系统,我使用socket.io但我得到这个错误

Server is listening on 3000
made socket connection
C:\Users\User\MyFolder\Projects\FMIS\app\app.js:139
socket.on('chat', function(data){
       ^

TypeError: socket.on is not a function
at Namespace.<anonymous> 
(C:\Users\User\MyFolder\Projects\FMIS\app\app.js:139:12)
at emitOne (events.js:116:13)
at Namespace.emit (events.js:211:7)
at Namespace.emit 
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)

This what I have tried to do in my `app.js 这就是我在`app.js中尝试过的

var reload = require('reload');
var bodyParser =  require('body-parser');
var app = express();
var  socket = require('socket.io');
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'ejs');
app.set('views','app/views');
app.locals.siteTitle = "FMIS";
app.use(express.static('app/public'));

app.use(require('./routes/Chat_api'));
app.use(require('./routes/Chat'));

var server = app.listen(app.get('port'),()=>{
console.log('Server is listening on '+ app.get('port'));
});

var io = socket(server);

io.on('connection',function(){
    console.log('made socket connection');
    socket.on('chat', function(data){
        // io.sockets.emit('chat',data);
        console.log(data);
    });
});
reload(server, app);

I send and recieve data from the client like this 我发送并从客户端收到这样的数据

 socket.emit('chat',{
          user: chatUsername.value,
          Message: chatMessage.value
        });

socket.on('chat',function(data){
        // showMessage(data);
        console.log(data);
    });        

You're using the library reference for socket.io, which does not contain the function property on . 您正在使用socket.io库参考,不包含功能属性on What are you trying to do is use the socket provided to you as an argument of the callback on io.on connection event. 你想要做的是使用提供给你的套接字作为io.on连接事件回调的参数。 To fix that you can just add socket to the arguments on your callback function. 要解决此问题,您只需将socket添加到回调函数的参数即可。 Like this: 像这样:

io.on('connection',function(socket) {
  console.log('made socket connection');
  socket.on('chat', function(data){
    // io.sockets.emit('chat',data);
    console.log(data);
  });
});

Now socket is referring to the socket provided to you by the connection. 现在socket指的是连接提供给你的套接字。 See this example for more info. 有关详细信息,请参阅此示例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM