使用socket.io和express,为什么我的io.on('connection')方法不起作用

时间:2018-09-11 05:00:45

标签: javascript node.js express socket.io

我正在尝试通过遵循本教程来教自己使用socket.io和node.js:https://www.youtube.com/watch?v=tzNOqcoupWQ

这是在教程末尾编写的代码:

const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const path = require('path');
const port = process.env.Port || 3000;

app.use(express.static(path.join(__dirname, 'public')));

app.set('view engine', 'ejs');

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
})

server.listen(port, function(){
    console.log('Listening on port ' + port);

    io.on('connection', function(socket){
        console.log('User Connected! :)');

        //handle a new message
        socket.on('new:message', function(msgObj){
            io.emit('new:message', msgObj);
        });

        //handle a new member joining
        socket.on('new:member', function(name){
            io.emit('new:member', name);
        });
    })
});

问题是,似乎io.on('connection'方法未通过,并且“用户已连接!”消息未打印到控制台,但我的index.html加载得很好(目前仅是一个简单的标题)。

该如何解决?

[编辑] 这是index.html

<h1>Hello, World!</h1>

1 个答案:

答案 0 :(得分:3)

您可能需要包括客户端套接字。即在要投放的html文件中添加以下代码。

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

documentation中集成Socket.IO 是一个很好的起点。