代码之家  ›  专栏  ›  技术社区  ›  m.o

插座io类型错误:套接字。on不是一个函数

  •  4
  • m.o  · 技术社区  · 7 年前

    我正在使用express开发一个节点应用程序,它有一个聊天系统,我正在使用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)
    

    这就是我在应用程序中尝试做的。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);
    

    我像这样从客户端发送和接收数据

     socket.emit('chat',{
              user: chatUsername.value,
              Message: chatMessage.value
            });
    
    socket.on('chat',function(data){
            // showMessage(data);
            console.log(data);
        });        
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Matheus Correia    7 年前

    您正在使用socket的库引用。io,不包含function属性 on 。您试图做的是使用提供给您的套接字作为上回调的参数 io.on 连接事件。要解决这个问题,您只需添加 socket 回调函数上的参数。像这样:

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

    现在 插座 是指连接提供给您的插座。看见 this example 了解更多信息。