使用Socket.io发送和接收事件

时间:2018-03-13 11:38:24

标签: node.js express socket.io

我尝试在我的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文件中,获取&#34; io&#34;变量我把所有东西包裹在一个函数中。

我无法在客户端发出POST请求时收到消息。

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

1 个答案:

答案 0 :(得分:0)

试试这个:

// 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);

我不确定您是否已在自己的代码中更新此内容,但此代码段应将io传递给路由器:

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