1

我正在使用 node js 和 socket .io 开发一个一对一的聊天应用程序

但是当我尝试运行我的 chat.html 时,它会给出一个错误“未定义参考错误 io”。

我用谷歌搜索了这个问题,我找到了一个解决方案,上面写着使用 cdn,我也试过了。但这次错误不同的是“找不到方法连接”

socket.io.js 位于 node_modules\socket.io\lib

当我试图通过浏览器访问它时,它说“无法获取 socket.io.js”

我在这里粘贴我的代码。请帮助我

服务器.js

var app = require('express').createServer();
var io = require('socket.io').listen(app);
var fs = require('fs');

app.listen(8080);


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


var usernames = {};

function check_key(v) {
    var val = '';

    for (var key in usernames) {
        if (usernames[key] == v)
            val = key;
    }
    return val;
}

io.sockets.on('connection', function (socket) {


    socket.on('sendchat', function (data) {

        io.sockets.emit('updatechat', socket.username, data);
    });


    socket.on('adduser', function (username) {

        socket.username = username;

        usernames[username] = socket.id;

        socket.emit('updatechat', 'SERVER', 'you have connected');

        socket.emit('store_username', username);

        socket.broadcast.emit('updatechat', 'SERVER', username + ' has connected: ' + socket.id);

        io.sockets.emit('updateusers', usernames);
    });


    socket.on('disconnect', function () {

        delete usernames[socket.username];

        io.sockets.emit('updateusers', usernames);

        socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected');
    });


    socket.on('check_user', function (asker, id) {

        io.sockets.socket(usernames[asker]).emit('msg_user_found', check_key(id));
    });


    socket.on('msg_user', function (usr, username, msg) {

        io.sockets.socket(usernames[usr]).emit('msg_user_handle', username, msg);

        fs.writeFile("chat_data.txt", msg, function (err) {
            if (err) {
                console.log(err);
            }
        });
    });


});

聊天.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script src="/socket.io/socket.io.js "></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    <script type="text/javascript">
        var my_username = '';
        try {
            function send_individual_msg(id) {

                socket.emit('check_user', my_username, id);

            }

            var socket = io.connect('http://localhost:8008');


            socket.on('connect', function () {

                socket.emit('adduser', prompt("What's your name?"));
            });


            socket.on('msg_user_handle', function (username, data) {
                $('#conversation').append('<b>' + username + ':</b> ' + data + '<br>');
            });


            socket.on('msg_user_found', function (username) {

                socket.emit('msg_user', username, my_username, prompt("Type your message:"));
            });


            socket.on('updatechat', function (username, data) {
                $('#conversation').append('<b>' + username + ':</b> ' + data + '<br>');
            });


            socket.on('store_username', function (username) {
                my_username = username;
            });


            socket.on('updateusers', function (data) {

                $('#users').empty();
                $.each(data, function (key, value) {
                    $('#users').append('<div style="cursor:pointer;" onclick="send_individual_msg(\'' + value + '\')">' + key + '</div>');
                });
            });


            $(function () {

                $('#datasend').click(function () {
                    var message = $('#data').val();
                    if (message == '' || jQuery.trim(message).length == 0)
                        return false;
                    $('#data').val('');

                    socket.emit('sendchat', message);
                });


                $('#data').keypress(function (e) {
                    if (e.which == 13) {
                        $(this).blur();

                        $('#datasend').click();
                    }
                });
            });
        }
        catch (err) {
            alert(err);
        }

    </script>
</head>
<body>
    <div style="float: left; width: 100px; border-right: 1px solid black; height: 300px;
        padding: 10px; overflow: scroll-y;">
        <b>USERS</b>
        <div id="users">
        </div>
    </div>
    <div style="float: left; width: 550px; height: 250px; overflow: scroll-y; padding: 10px;">
        <div id="conversation">
        </div>
        <input id="data" style="width: 200px;" />
        <input type="button" id="datasend" value="send" />
    </div>
</body>
</html>
4

2 回答 2

2

由于您使用的是 Express,因此您应该将客户端 socket.io.js 文件放在

public/javascripts 

在您的 HTML 文件中,您的文件路径将是:

javascripts/socket.io.js
于 2013-04-26T12:09:41.003 回答
0

由于您使用的是静态文件,因此您需要使用 socketio.js

//For including static files in expressJS
app.use(express.static(__dirname + '/'));

或者

Express 提供了一个内置的中间件 express.static 来服务静态文件,例如图片、CSS、JavaScript 等。

您只需将保存静态资产的目录的名称传递给 express.static 中间件即可开始直接提供文件。例如,如果您将图像、CSS 和 JavaScript 文件保存在名为 public 的目录中,您可以这样做 -</p>

app.use(express.static('public'));

将您的 /socket.io/socket.io.js 放在侧面公共目录中

于 2017-02-15T09:52:53.483 回答