node.js - 路由器页面中的 NodeJS socket.io

标签 node.js socket.io node-modules

我有 app.js 代码:

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

io.on('connection', function(socket){

  socket.on('newRideAdded', function(exclude){
    io.emit('newRideAdded', exclude);
  });

  console.log('a user connected');
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });

});

var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

app.use(express.static(__dirname + '/public/'));

app.use('/rides', require('./routes/rides'));
app.use('/user', require('./routes/user'));

server.listen("8080", function() {
  console.log("Connected to db and listening on port 8080");
});

我想将套接字 io 代码移动到它的路由器页面。

即路由页面:

var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var db = mongojs("ride4you", []);

router.post('/getRides', function(req, res, next) {
  db.rides.find(function(err, docs) {
    res.json(docs);
  });
});

// rest of the restapi in this page.

// I want socket code to be here

module.exports = router;

如您所见,我在每个路由器的页面中都发出了每个套接字,并且我在路由器页面中已经有了 module.exports。

如何实现?

谢谢。

最佳答案

使用 Express 4,您可以在 app.js 文件中使用

app.set('socketio', io);

然后在你的路由器或 Controller 中,你可以使用

router.post('/getRides', function(req, res, next) {
    var io = req.app.get('socketio');

    io.to(//socket.id//).emit("message", data);

    db.rides.find(function(err, docs) {
        res.json(docs);
    });
};

这是一种传递引用的简洁方式。

关于node.js - 路由器页面中的 NodeJS socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47249009/

相关文章:

javascript - Node.js 参数化路由 - 好还是坏的做法?

android - 错误 : EPERM: operation not permitted

ruby-on-rails - 从 Rail Active 调用 Socket.io :Record callback or observer

node.js - 如何使用 PHP 向 NodeJS 服务器通知某些信息?

reactjs - 是否可以永久编辑node_modules中的文件?

javascript - 如何在 NodeJs 中修改数组中的 JSON 键名称

gulp - 如何使用 gulp 从 node_modules 导入 bootstrap 4 sass/scss

node.js - 如何在 Node.js 中同步调用

javascript - pm2 不使用实验模块标志

jquery - Node js 和 socket.io 与 lua 服务器开发