执行socket.io聊天示例node.js时出错

时间:2014-06-23 13:27:18

标签: javascript node.js socket.io chat

刚开始学习node.js的多人游戏功能:

使用Windows 7,npm安装node.js和组件 我几乎没有让我发疯的问题

var io = require('socket.io')(http);

投掷错误:

D:\projects\node\chat\index.js:3
var io = require('socket.io').(http);
                              ^
SyntaxError: Unexpected token (
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

有些时候更多的人无法处理或没有定义这样的方法等等。

在脚本无法正常工作的浏览器中的客户端

<script>
  var socket = io();
  $('form').submit(function(){
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
  });
  socket.on('chat message', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
</script>

投掷(不是错误),但是您在网络中执行的每项操作都有消息:

debug - served static content /socket.io.js

经过大量的努力,我得到了两个在答案中分享的简单修复

2 个答案:

答案 0 :(得分:2)

我可能不在这里,因为我自己还在学习节点,但在我看来,答案比目前接受的(2014.7.21)建议更简单;你不应该在.require('socket.io')之间有(http);这表明它是require返回的对象中的某种匿名函数,当它实际上是构造函数时需要被召唤。

它应该是这样的:

var io = require('socket.io')(http);

我不确定你的第二个问题的解决方案,因为我没有遇到它。但我确实发现我需要将jquery函数封装在.ready()中,这是标准做法。结果如下:

var socket = io();
$(function () {
    socket.on('chat message', function (msg) {
        $('#messages').append($('<li>').text(msg));
    });
    $('#chatForm').submit(function () {
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
    });
});

答案 1 :(得分:0)

对于第一个错误,你将不得不使用socket.io的listen方法,否则它不起作用(我根据socket.io聊天示例关注这个)

var io = require('socket.io').listen(http);

第二个提示或问题,假设工作但不知何故你必须在io.connect方法中定义url

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