节点JS套接字IO聊天问题

我正在使用节点js和套接字.io开发一对一的聊天应用程序

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

我GOOGLE了这个问题,我发现它使用cdn的解决scheme,我也试过。 但这次错误是不同的是“找不到方法连接”

socket.io.js在node_modules \ socket.io \ lib中

当我试图通过浏览器访问它说:“不能得到socket.io.js”

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

Server.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); } }); }); }); 

Chat.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> 

既然你使用的是Express,你应该把你的客户端的socket.io.js文件放进去

 public/javascripts 

并在您的HTML文件中的文件的path将是:

 javascripts/socket.io.js 

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

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

要么

Express提供了一个内置的中间件express.static来提供静态文件,如图像,CSS,JavaScript等

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

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

把你的/socket.io/socket.io.js放在公共目录下