在我的Express 4 Routes中添加Socket.io时遇到了麻烦。在我的route/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;

但是io是未定义的。我已经看到了如何执行此操作的几个示例,但没有一个对我有用。任何帮助,将不胜感激。

最佳答案

您需要将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;

然后,无论何时导入此路由,您都将调用此函数,例如:require(./routefile)(io)
这是一篇有关创建需要传递变量的模块的好文章:Node.Js, Require and Exports

关于javascript - 使用Socket.io表示4条路线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29872317/

10-16 20:51