在我的Express 4路线中添加Socket.io的时间非常粗略。在我的routes / index.js中,我有:
Having a rough time adding Socket.io in my Express 4 Routes. In my routes/index.js I have:
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未定义。我已经看到了几个如何做到这一点的例子,但没有一个对我有用。任何帮助将不胜感激。
but io is undefined. I have seen several examples of how to do this, but none that worked for me. Any help would be appreciated.
推荐答案您需要将socket.io变量传递给路由器模块,以便它具有访问权限。您可以通过在函数调用中包装模块来完成此操作。
You need to pass your socket.io variable to the router module so that it has access. You could do this by wrapping your module in a function call.
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)
Then, whever you import this route you would call this function like: require(./routefile)(io)
这是一篇关于创建需要传递变量的模块的好文章: Node.Js,Require and Exports
Here's a good article about creating modules that require being passed a variable: Node.Js, Require and Exports
更多推荐
使用Socket.io快速4路由
发布评论