ReferenceError: Can't find variable: io

ReferenceError: Can't find variable: io

我有以下文件夹结构 html 目录:index.html, index.html, public/js 目录: main.js, socket.js, 在根目录下我有 server.js

在 server.js 中,我设置 socket.io 如下:

/*********************  WEBSOKETS ***************************/

    const io = require('socket.io')(https);

    io.on('connection', function (socket) {
        console.log('a user connected');
        socket.on('disconnect', function () {
            console.log('user disconnected');
        });
    });

    /************************************************ ***/

    io.on('connection', function (socket) {
        socket.on('chat message', function (msg) {
            console.log('message: ' + msg);
            io.emit('chat message', msg);
        });
    });

并且在 socket.js 文件中我处理它的客户端部分:

(function ($) {
    var socket = io().connect() // connect to the server

    $(function () {
        $('form').submit(function () {
            socket.emit('chat message', $('#m').val());
            $('#m').val('');
            return false;
        });
        socket.on('chat message', function (msg) {
            $('#messages').append($('<li>').text(msg));
            var happyEmoji = $('#messages').html().replace(/(\:\))/g, '&#x1F600;');
            $('#messages').html(happyEmoji);
            var sadEmoji = $('#messages').html().replace(/(\:\()/g, '&#x1F614;');
            $('#messages').html(sadEmoji);
        });
    });

})(jQuery);

但后来我得到了:

ReferenceError: Can't find variable: io

我也尝试直接放在我的 main.html 文件中,但我得到了同样的错误。我认为这是因为 main.htmlhtml d 目录中并且没有直接访问 ioserver.js这样。

如何解决?

您需要将此行插入 main.html 文件:

<script src="/socket.io/socket.io.js"></script>

这会设置您的 io 变量,因此您可以使用它:

var socket = io();

更多信息和示例here