2017-05-09 12 views
0

私は現在、特定のウェブサイトにリアルタイムチャットを追加しようとしています。私はExpress JSパッケージを使用しており、初期設定情報(start/listenサーバーなど)は 'www/bin'(デフォルトでは)にあります。app.get( 'foo')(Express/Node JS)

だから、これは私の初期化ファイル(すなわち、「WWW/binに」)です:

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('nodeblog:server'); 
var http = require('http'); 

/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

/** 
    * Listen to Sockets 
    */ 
var io = require('socket.io').listen(server); 
app.set('socketio', io); // FIXME: Cannot app.get('socketio') w/out req 


/** 
* Listen on provided port, on all network interfaces. 
*/ 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

この事は、私は、ルータファイルのいずれかに必要があるとして、私はこのSocketIO宣言「を取得する」ことができないということですクライアント/サーバー間でメッセージを交換します。私はそれが

undefinedあなたは私が正しく、このapp.get('socketio',io)を宣言する必要があります方法を知っています返します(「socketio)」をapp.getしようとすると、そう

var express = require('express'); 
var router = express.Router(); 
var app = express(); 
// Models 
var auth = require('../models/auth'); 

var io = app.get('socketio'); 

router.get('/', auth.ensureAuthenticated, function(req, res, next) { 
    res.render('chat', { 
    title: 'Chat' 
    }); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 

    socket.on('chat message', function(msg) { 
    io.emit('chat message', msg); 
    }); 

    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
    }); 
}); 

module.exports = router; 

:ここ

は、このルートファイルです私は、(リクエストメソッドにではなく)どこにでもアクセスできるように

エラー:

chat.js:15 
io.on('connection', function(socket){ 
^

TypeError: Cannot read property 'on' of undefined 

答えて

0

まず、私たちの機能(別のファイルにio.on('connection', ...)を含む)を分離する必要があります。

第2に、サーバーがそれを聞くことができるように、 'www/bin'に追加する必要があります。答えは「www/bin」で変更した場合です:

var io = require('socket.io').listen(server); 
require('../models/socketio.js')(io); 

これは答えです。

関連する問題