在我的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/