使用Socket.io快速4路由

And*_*cia 6 javascript node.js

在我的Express 4路线中添加Socket.io的时间非常艰难.在我的routes/index.js中我有:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
  res.render('index', { title: 'Express' });
});

router.post('/message', function(req, res) {
  console.log("Post request hit.");
  // res.contentType('text/xml');
  console.log(appjs);
  io.sockets.emit("display text", req);
  // res.send('<Response><Sms>'+req.body+'</Sms></Response>');
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

但是io是未定义的.我已经看到了几个如何做到这一点的例子,但没有一个对我有用.任何帮助,将不胜感激.

Log*_*man 9

您需要将socket.io变量传递给路由器模块,以便它具有访问权限.您可以通过将模块包装在函数调用中来完成此操作.

var express = require('express');
var router = express.Router();

/* GET home page. */
var returnRouter = function(io) {
    router.get('/', function(req, res, next) {
        res.render('index', {
            title: 'Express'
        });
    });

    router.post('/message', function(req, res) {
        console.log("Post request hit.");
        // res.contentType('text/xml');
        console.log(appjs);
        io.sockets.emit("display text", req);
        // res.send('<Response><Sms>'+req.body+'</Sms></Response>');
    });

    return router;
}

module.exports = returnRouter;
Run Code Online (Sandbox Code Playgroud)

然后,当您导入此路线时,您将调用此函数,如: require(./routefile)(io)

这是一篇关于创建需要传递变量的模块的好文章:Node.Js,Require和Exports