【问题标题】:Emitting and receiving events with Socket.io使用 Socket.io 发送和接收事件
【发布时间】:2018-03-13 11:38:23
【问题描述】:

我正在尝试在我的 Node Js 服务器上使用 socket.io 发出一个事件并在客户端接收它,但我无法让它工作。

这是我的服务器代码:

// require our dependencies
var express        = require('express');
var expressLayouts = require('express-ejs-layouts');
var bodyParser     = require('body-parser');
var app            = express();
var port           = 3000;
var server         = require("http").Server(app);
var io             = require('socket.io')(server);


// use ejs and express layouts
app.set('view engine', 'ejs');
app.use(expressLayouts);

// use body parser
app.use(bodyParser.json({extended : true}));

// route our app
var router = require('./app/routes');
app.use('/', router);


// set static files (css and images, etc) location
app.use(express.static(__dirname + '/public'));

// start the server
app.listen(port, function() {
  console.log('app started');
});

这是我的 routes.js 代码,魔法应该发生的地方:

module.exports = function(io){
// require express
var express = require('express');
var path    = require('path');

// create our router object
var router = express.Router();


// export our router
//module.exports = router;

router.post("/", function(request, response) {
console.log(request.body); 
io.emit('getupdate',{hello:'world'});
});

// route for our homepage
router.get('/showevent', function(req, res) {
res.render('pages/showevent',{data:exportage});
});
return router;
}

虽然这是我的客户端脚本:

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

在 routes.js 文件中,我将“io”变量全部封装在一个函数中。

如果客户端发出 POST 请求,我无法收到消息。

你能帮我在这里找到问题吗?

【问题讨论】:

  • 试试io = require('socket.io').listen(server)?我在我的一些代码中发现了它并且它有效
  • 它没有给出任何错误,但它也不起作用:(

标签: node.js express socket.io


【解决方案1】:

试试这个:

// require our dependencies
var express        = require('express');
var expressLayouts = require('express-ejs-layouts');
var bodyParser     = require('body-parser');
var app            = express();
var port           = 3000;
var server         = app.listen(port);
var io             = require('socket.io').listen(server);

我不确定你是否在自己的代码中更新了这个,但是这个 sn-p 应该将io 传递给路由器:

// route our app
var router = require('./app/routes')(io);
app.use('/', router);

【讨论】:

  • 您好,它给了我一个错误“无法读取 ../../express/lib/router/index.js:635:15 处未定义的 'apply' 属性”
  • 这是一个库文件
  • 答案没有描述原始代码问题的解释性文本,而是让读者尝试找出您更改的内容,始终可以通过添加解释文本来改进问题。
猜你喜欢
  • 2012-06-11
  • 2019-09-12
  • 2021-10-22
  • 2023-03-27
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
相关资源
最近更新 更多