我如何在具有快速框架的节点上 运行 Socket.io?

How can I run Socket.io on node with express framework?

我正在尝试 运行 使用 express 框架的 websocket 和 node.js 上的 socket.io

这是我所做的

var env = require('./config');
var app = require('express').createServer();

var server = app.listen(env.socket.port, env.socket.host, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


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

app.get('/', function (req, res) {
    res.send('Landed!');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });

  socket.on('my other event', function (data) {
    console.log(data);
  });

});

但是它不起作用!这是我得到的错误

C:\Program Files\nodejs>node socket.js
C:\Program Files\nodejs\socket.js:2
var app = require('express').createServer();
                             ^
TypeError: undefined is not a function
    at Object.<anonymous> (C:\Program Files\nodejs\socket.js:2:30)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

我做错了什么?

require('express').createServer() 用于非常旧版本的 Express(例如 2.x)。您应该使用 this example 表示 Express 3.x/4.x:

var env = require('./config');

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(env.socket.port, env.socket.host, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

app.get('/', function (req, res) {
    res.send('Landed!');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });

  socket.on('my other event', function (data) {
    console.log(data);
  });

});