2017-05-09 3 views
0

현재 특정 웹 사이트에 실시간 채팅을 추가하려고합니다. Express JS 패키지를 사용 중이며 초기화 정보 (예 : 시작/수신 서버 등)는 'www/bin'(기본적으로)에 있습니다.app.get ('foo') (Express/Node JS)

그래서,이 내 init 파일 (예 : 'www /에서 빈')입니다 :

/** 
* 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); 

는 그리고 것은 I가 라우터 파일 중 하나에서 필요로하는 나는이 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', ...) 포함)을 분리해야합니다.

두 번째로 서버가 'www/bin'에 추가해야 서버가이를 수신 할 수 있습니다. 대답은 'www/bin'에서 변경하는 경우입니다.

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

답변입니다.

관련 문제