1

socket.ioExpress 3.0.6 を使用して、0.9.13 を使用して小さな Node アプリを作成しています。socket.iohas no methodと表示されているため、実行を開始しても何も見えませんlisten()。これが私のコードです(コンパイルされたcoffeescriptなので、少し醜いです):

(function() {
  var app, express, io, port, usernames;

  express = require('express');

  app = express();

  io = require('socket.io'.listen(3000));

  port = 3000;

  app.listen(port);

  console.log("Listening on port " + port);

  console.log('CNTRL-C to quit.');

  app.engine('hamlc', require('haml-coffee'.__express));

  app.get('/', function(request, response) {
    return response.render('index.hamlc');
  });

  usernames = {};

  io.sockets.on('connection', function(socket) {
    socket.on('send-chat', function(msg) {
      return io.sockets.emit('update-chat', socket.username, msg);
    });
    socket.on('add-user', function(username) {
      socket.username = username;
      usernames[username] = username;
      socket.emit('update-chat', 'SERVER', "You have connected as " + username + ".");
      socket.broadcast.emit('update-users', 'SERVER', "" + username + " has joined the chat.");
      return io.sockets.emit('update-users', usernames);
    });
    return socket.on('disconnect', function() {
      delete usernames[socket.username];
      io.sockets.emit('update-users', usernames);
      return socket.broadcast.emit('update-chat', 'SERVER', "" + socket.username + " has disconnected from chat");
    });
  });

}).call(this);

次のエラーが発生します。

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
TypeError: Object socket.io has no method 'listen'
    at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:8:28)
    at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:44:4)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)
    at EventEmitter._tickCallback (node.js:192:40)

回答は大歓迎です。:-)

4

1 に答える 1

4

これを試して:

var express = require('express'),
    http = require('http');

var app = express();
var server = http.createServer(app);

var io = require('socket.io').listen(server);
server.listen(3000);

Socket.ioは、実行時に基本的にhttpオブジェクトをハイジャックします。ただし、express 3.xxはhttp.serverから実行されなくなったため、socket.ioで使用するには独自のインスタンスを作成する必要があります。

于 2013-01-25T00:38:36.900 に答える