Expressアプリケーションで特定のルートにアクセスするときにsocket.IOルームに参加する際に問題が発生しました。Expressルートにアクセスしたときにsocket.IOルームに参加する
だから私は現在、以下を設定している:
app.js
var express = require('express');
var app = express();
var http = require('http').Server(app);
var socketio = require('socket.io').listen(http);
var socketjs = require(libs + 'sockets/socket.js');
...
var server = http.listen(app.get('port'), function() {
debug('Taskful server listening on port ' + app.get('port'));
log.info('Taskful server listening on port ' + app.get('port'));
});
global.socketIO = socketio;
socketjs.connect(server);
ソケット/ socket.js
var libs = process.cwd() + '/libs/';
var log = require(libs + 'log')(module);
module.exports.connect = function(server) {
var io = global.socketIO;
io.on('connection', function (socket) {
//This comes through
log.info('Connection to socket.io');
});
}
ルート - projects.jsを
var io = global.socketIO;
...
router.get('/:id', function(req, res) {
projectController.findByIdExtended(req, res, function(err, ret) {
if (err) {
res.redirect('/projects');
}
req.session.viewingProject = req.params.id;
//I would like to be able to join the room here
io.room = 'project_' + req.session.viewingProject;
io.join(io.room);
var db_project = ret[0];
var db_tasks = ret[1];
res.render('project', { user : req.user, project : db_project, tasks: db_tasks });
});
});
コメントと同じように、ルートにアクセスするとソケットIOルームに参加したいと思います。
私はio.sockets.join
を試しましたが、それらはすべて機能していないものです。私はそれをコンソールログに見ることができるので、グローバルIOスコープは間違いなくあります。
EventEmittersでこれを行うのは簡単ですが、socket.jsファイル内のイベントに参加するだけですか?もしそうなら、どのようにすればよいのでしょうか?
何か助けていただければ幸いです。