node.js - Express Socket.io 示例服务器不工作

标签 node.js express pug

我正在尝试学习 socket.io,他们的 Express 示例不起作用。这是我的代码:

app.js:
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , server = require('http').createServer(app)
  , path = require('path')
  , io = require('socket.io').listen(app);

var app = express();

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));

server.listen(3000);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.jade');
});

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

和我的index.jade 文件:

extends layout

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

当我访问本地主机时,浏览器只是继续等待响应。它最终会超时。

与此问题相关的大多数其他问题都有一些奇怪的示例代码实现。我实际上只是想按照他们所展示的那样实现它。

最佳答案

问题是您在创建 io 之后又创建了 app。所以这一行

  , io = require('socket.io').listen(app);

实际上与

相同
  , io = require('socket.io').listen(undefined);

删除此行

var app = express();

在第一行和 io = require('socket.io') 之间添加 , app = express()

关于node.js - Express Socket.io 示例服务器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154150/

相关文章:

javascript - 如何在angularjs中刷新和重新绑定(bind)数据库中的数据

javascript - emit() 和 on() 不起作用

node.js - AWS Lambda 函数在部署后不起作用

javascript - 如何在 Controller 文件中使用 socket.io

Node.js Express + Jade(内衬项目上的事件类)

javascript - joi:不返回自定义错误,abortEarly 设置为 false

node.js - Node Js 中基于角色的访问控制

javascript - jade模板系统自动隐藏div元素?

javascript - 如何将数组对象传递给 Jade

jquery - 将 GET 参数传递给 Express+Mongoose Restful API