我的nodejs简单代码有什么问题

时间:2011-06-27 07:01:15

标签: node.js socket.io

这是我的nodejs代码:

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

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

,客户端html是:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

当我使用节点a.js运行它时,我收到以下错误:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Object 8011 has no method 'listeners'
    at new <anonymous> (/home/zjm1126/node_modules/socket.io/lib/socket.io/listener.js:29:31)
    at Object.listen (/home/zjm1126/node_modules/socket.io/lib/socket.io/index.js:11:10)
    at Object.<anonymous> (/home/zjm1126/桌面/app/a.js:1:93)
    at Module._compile (module.js:407:26)
    at Object..js (module.js:413:10)
    at Module.load (module.js:339:31)
    at Function._load (module.js:298:12)
    at Array.<anonymous> (module.js:426:10)
    at EventEmitter._tickCallback (node.js:126:26)

但这是http://socket.io/中的演示代码,为什么会出现此错误?

更新

当我运行npm update socket.io时,服务器端正在运行

但客户端出现此错误:

io is not defined
 var socket = io.connect('http://localhost:8011');

这有什么问题?

2 个答案:

答案 0 :(得分:0)

您在下面指定的代码适用于socket.io 0.7.x(API)而不适用于0.6.x,因此这是错误所在的位置。你应该尝试npm update socket.io。根据{{​​1}}:

,我的依赖关系如下
npm ls

您是否也使用来自同一node.js服务器的socket.io客户端html或其他服务器(例如PHP或其他东西)。


我也通过PHP进行测试:

alfred@alfred-laptop:~/node/socketio-demo$ npm ls
/home/alfred/node/socketio-demo
└─┬ socket.io@0.7.2 
  ├── policyfile@0.0.3 
  └── socket.io-client@0.7.2 

mkdir socketio-demo`
cd socketio-demo`
gedit server.js # my quick/dirty editor

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

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

我还在端口80上运行了一个PHP服务器:

alfred@alfred-laptop:~/node/socketio-demo$ node server.js 
   info  - socket.io started

gedit socket.php

在另一台主机上,您需要更新<script src="http://localhost:8011/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:8011/'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> 以指向您的socket.io服务器

<script src="http://localhost:8011/socket.io/socket.io.js"></script>指向您的socket.io服务器。使用这个设置我完全没有任何问题。

答案 1 :(得分:0)

ZJM - 我有一个与你相同的版本(试图让它开箱即用)。我得到了一个不同的错误(socket.js文件正在提供和记录,但没有发生连接)。我认为(90%肯定 - 似乎也有一些缓存问题)在客户端,提供没有参数的socket.io解决了这个问题。

不知道这对你有帮助,但希望能