express.js 4 and sockets with express router

后端 未结 5 1796
灰色年华
灰色年华 2020-12-05 00:58

I\'m trying to create a really simple node API using express.js 4 but I need a few \'realtime\' events for which I added socket.io. I\'m fairly new to both so I\'m likely m

5条回答
  •  广开言路
    2020-12-05 01:32

    One option is to pass it in to req object.

    app.js:

    var express = require('express');
    var path = require('path');
    var logger = require('morgan');
    var api = require('./routes/api');
    var app = express();
    var io = require('socket.io').listen(app.listen(3000));
    
    app.use(logger('dev'));
    app.use(express.static(path.join(__dirname, 'public')));
    
    io.sockets.on('connection', function (socket) {
        console.log('client connect');
        socket.on('echo', function (data) {
            io.sockets.emit('message', data);
        });
    });
    
    // Make io accessible to our router
    app.use(function(req,res,next){
        req.io = io;
        next();
    });
    
    app.use('/api', api);
    
    // error handlers omitted
    
    module.exports = app;
    

    ./routes/api.js:

    var express = require('express');
    var router = express.Router();
    
    router.put('/foo', function(req, res) {
        /* 
          do stuff to update the foo resource 
          ...
         */
    
        // now broadcast the updated foo..
        req.io.sockets.emit('update', foo); 
    });
    
    module.exports = router;
    

提交回复
热议问题