は私が失敗するが、異なるのNode.jsモジュールにsocket.io
のソケットオブジェクトを共有して、空のオブジェクトを取得しようとしています与え共有socket.ioは空のオブジェクト
Cannot call method 'on' of undefined
マイコード:
app.js
var express = require('express')
, app = express();
var server = require('http').createServer(app)
, io = require('socket.io').listen(server)
var routes = require('./routes')
, path = require('path')
, rss = require('./routes/rss')
// ...
exports.io = io;
ルート/ rss.js
私はこのことから得る出力ですio = require(__dirname + '/../app');
console.log(io);
io.sockets.on('connection', function(
console.log("Connection on socket.io on socket");
// .. do stuff
});
:
$ node app.js
info - socket.io started
{}
/home/XXX/programming/nodejs/node-express-aws/routes/rss.js:10
io.sockets.on('connection', function(socket){
^
TypeError: Cannot call method 'on' of undefined
at Object.<anonymous> (/home/XXX/programming/nodejs/node-express-aws/routes/rss.js:10:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/XXX/programming/nodejs/node-express-aws/app.js:9:10)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
私が試していると私は一つだけ(app.js)にsocket.io
と同じことを行うことができますが
var express = require('express')
, app = express();
var server = require('http').createServer(app)
, io = require('socket.io').listen(server)
var routes = require('./routes')
, path = require('path')
, rss = require('./routes/rss')
// ...
io.sockets.on('connection', function(socket){
logger.debug("Connection on socket.io on socket");
socket.emit('news', {will: 'be recived'});
});
私は時々 'TypeError例外を取得します:socketioオブジェクトを使用しようとしているときにundefined'の「EMIT」メソッドを呼び出すことはできませんグローバルなものとして: 'var socketio; module.exports = function(io){io.socketです。on( 'connection'、function(socket){socketio = socket;}); 'それをコードのどこかで使用します。 – Patryk
これは、最後にアプリケーションに接続した人を示す 'socketio'というトップレベルの変数を設定します。誰も接続していなければ 'undefined 'となります。 –