2013-04-26 2 views
1

Я разрабатываю один на один приложение чата с помощью узла JS и гнездо .ioNode JS Оправа IO чат вопрос

, но когда я пытаюсь бежать мое chat.html он выдает ошибку «Error И.О. Reference не определен» ,

Я искал эту проблему, и я нашел решение, которое он говорит, используя cdn, я тоже это пробовал. но на этот раз ошибка была другой она «не может найти способ подключения»

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> 
+0

Я знаю, что ссылки только ответы не являются предпочтительными, но посмотрели ли вы на этот урок? http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server – ljubiccica

ответ

1

Поскольку вы используете Express, вы должны поставить на стороне клиента socket.io.js файл в

public/javascripts 

и в вашем HTML файле путь файла будет:

javascripts/socket.io.js 
0

Поскольку вы используете статический файл, то есть socketio.js вам нужно использовать

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

или

Экспресс обеспечивает встроенный в промежуточном express.static обслуживать статические файлы, такие как изображения, CSS, JavaScript и т. д.

Вам просто нужно передать имя каталога, в котором хранятся ваши статические активы, в промежуточное программное обеспечение express.static, чтобы начать обслуживать файлы напрямую. Например, если вы храните свои изображения, CSS и файлы JavaScript в директории с именем общественности, вы можете сделать это -

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

Места вашего /socket.io/socket.io.js в стороне общественной директории

Смежные вопросы