在express 模板引擎的路由中加载socket.io

看了很多socket.io结合express的例子,只是一些单一的demo。很少有提到在express模板引擎中如何加载socket.io,今天琢磨了半个下午,好不容易搞出来了,这里分享给大家。

首先我们要知道的是,socket.io是基于http的。 也就是说http之上,有一个app,也有一个io。

如果我希望在某个路由中用socket.io,那么就需要把io挂载到router上export出来,然后再赋给app,再export出来,然后又最终的http server调用,思路就是这样。

先看下router.js的代码, 这里用的是pug(jade)来渲染的。

var express = require('express');
var router = express.Router();
router.get('/', function (req, res, next) {
  res.render('test');
});
router.io = function (io) {
  io.on('connection', function (socket) {
    console.log('connected');
  });
  return io;
}
module.exports = router

我们将io作为router的一个属性输出。

app.js的部分代码

var router = require('./routes/router');
app.io = router.io;
...
module.exports = app;

再把router属性传递给app.

这是 ./bin/www 的部分代码

/**
 * Create HTTP server.
 */

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

我们把在http上建立的io对象当成一个参数赋给 app.io。

这样就能完美执行了。

你的代码都可以写在 router.js 的router.io 的function中

router.io = function (io) {
 /**
 * 这里写代码 
 */
  return io;
}
module.exports = router
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值