Reputation: 2032
I want to have a structure for my application, but do not know how to call socket.io from sub-router and attach it to the server express
//app.js
var express = require('express')
, http = require('http')
, path = require('path'):
, i18n = require("i18n");
var app = express();
.
.
app.use(app.router);
require('./routes')(app);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express port " + app.get('port'));
});
//routes.js
module.exports = function (app) {
var rou_admin = require('./routers/admin')
, rou_login = require('./routers/login')
, rou_page = require('./routers/page')
, rou_logou = require('./routers/logout');
function restrict(req, res, next) {
if (req.session.user){
next();
} else {
res.redirect('/login');
}
}
//General
app.get('/', rou_page.page);
//Admin
app.get('/admin', rou_admin.admin);
//xxxx
app.get('/xxxx', rou_admin.xxxx);
//ssss
app.get('/ssss', rou_admin.ssss);
.
.
};
//routes/admin.js
exports.admin = function(req, res){
res.render('index',{title: 'Chat Room'})
var io = require('socket.io').listen(app);
io.sockets.on('connection', function(socket) {
...code...
}
};
How could I do this, If you have a lot better idea. var io = require('socket.io').listen(app);
Upvotes: 0
Views: 1314
Reputation: 48003
You already got most of the solution. Just make few changes :
routes.js
module.exports = function (app) {
var rou_admin = require('./routers/admin')(app), //pass app to routes/admin.js itself
routes/admin.js
function admin(app)
{
admin.start= function(req, res){
res.render('index',{title: 'Chat Room'})
var io = require('socket.io').listen(app);
...code...
};
}
module.exports = admin;
here it just defines the function, you can use admin.start() to execute your code.
Upvotes: 1