2017-11-12 13 views
1

에서 Socket.IO에 :NodeJS 내가 app.js 코드가 라우터 페이지

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

io.on('connection', function(socket){ 

    socket.on('newRideAdded', function(exclude){ 
    io.emit('newRideAdded', exclude); 
    }); 

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

}); 

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies 

app.use(express.static(__dirname + '/public/')); 

app.use('/rides', require('./routes/rides')); 
app.use('/user', require('./routes/user')); 

server.listen("8080", function() { 
    console.log("Connected to db and listening on port 8080"); 
}); 

을 그리고는 라우터의 페이지 코드 IO 소켓을 이동하려는. 라우터 페이지입니다

:

var express = require('express'); 
var router = express.Router(); 
var mongojs = require('mongojs'); 
var db = mongojs("ride4you", []); 

router.post('/getRides', function(req, res, next) { 
    db.rides.find(function(err, docs) { 
    res.json(docs); 
    }); 
}); 

// rest of the restapi in this page. 

// I want socket code to be here 

module.exports = router; 

당신은 내가 각 소켓은 각 라우터의 페이지에 방출하고 난 이미 라우터 페이지에서 module.exports이 볼 수 있듯이.

어떻게 할 수 있습니까?

감사합니다. 당신의 app.js 익스프레스 4 사용

답변

2

는 다음 라우터 또는 컨트롤러에서이 참조를 전달하는 깨끗한 방법입니다

router.post('/getRides', function(req, res, next) { 
    var io = req.app.get('socketio'); 

    io.to(//socket.id//).emit("message", data); 

    db.rides.find(function(err, docs) { 
     res.json(docs); 
    }); 
}; 

을 사용할 수 있습니다 당신은

app.set('socketio', io); 

를 사용할 수있는 파일 을 따라서.

+1

이것은 조금 관련이 없지만 계속 route 등으로 계속 전달하는 것을 피하는 명시 적 응용 프로그램 주위에 socket.io 연결 객체를 전달하는 것이 가장 쉬운 방법입니다. – Freddie

+0

클라이언트에서 방출하는 대신 알려주세요 노드 서버에서 수신 한 다음 다시 클라이언트 측에서 수신 한 다음 이것을 단순화 한 다음 이제는 두 가지 방법 대신 단지 한 가지 방법입니다. nodejs 서버에서 내 보낸 다음 클라이언트 측에서 수신합니다. 권리? 글쎄, 나는 이것을 테스트하고 굉장합니다. 그러나 한 가지, 연결 기능에 작동하지 않습니다 io.on ('연결'기능 (소켓) {('newRideAdded' socket.on, 기능 (제외) { 어쩌면 당신은 이유를 알고 ? – Raz

+0

시도해 보니 매우 좋았습니다. 감사합니다. – Raz