2014-10-16 331 views
0

內emit.to一個socket.io房間,我有以下代碼結構:如何從快遞航線

/app.js

var user = require('./server/routes/api/user'); 
var io = require('socket.io').listen(server); 
require('./server/sockets/base')(io); 

我知道我可以發出事件通過以下方式(測試和工作)

io.to("someroom").emit("news", "news"); 

問題是,我想能夠從我的路由文件,它不具有訪問io對象發出的事件。

/routes/api/user.js

router.post('/login', function(req, res){ 
// HERE I WANT TO EMIT THE EVENT BY USING io.to("someroom").emit("news", "news"); 
// I TRIED req.socket.emit('news', { hello: 'world' }); without luck 
} 

什麼是這個文件夾結構發出的最簡單的方法?

+0

據我知道你不能使用的是在TPC的連接,但混合HTTPS請求和套接字調用是行不通的。 – 2014-10-16 15:14:33

+0

@ jack.the.ripper也許他只是想在有人使用HTTP登錄時通知房間。你有沒有嘗試導出io並從另一個文件中請求它? – liadmat 2014-10-16 15:27:28

+0

@liadmat我嘗試了類似的東西,有很多問題試圖在web請求中執行任何套接字操作,如果你有一個如何做到這一點的可靠參考,我想採取一個高峯,歡呼! – 2014-10-16 15:31:23

回答

2

您的路線需要io對象,因此您必須將其作爲參數傳遞。

在user.js的:

module.exports = function (io) { 

    // all of this router's configurations 

    router.post('/login', function (req, res, next) { 
     io.to('someroom').emit('news', 'news'); 
    }); 

    return router; 

} 

當您使用的路線,給它io參考:

app.use(..., user(io)); 
+0

到目前爲止,這打破了我的路線,但我正在研究它 – Jorre 2014-10-17 08:14:15

+0

似乎無法擺脫錯誤「無效的HTTP狀態代碼404」我得到我所有的用戶路線。 – Jorre 2014-10-17 08:30:36

+0

解決了它,我的404路由在我的用戶路由之前加載。感謝您的回答,這解決了我的問題! – Jorre 2014-10-17 08:40:09

0

只導出插座,並要求其在任何文件中要使用它來自。

/socket.js

var server = require('./app.js'); 
var io = require('socket.io').listen(server); 
module.exports = io; 

/app.js

module.exports = server; 
var user = require('./server/routes/api/user'); 
var io = require('./socket.js'); 
require('./server/sockets/base')(io); 

/routes/api/user.js

var io = require('../../../socket.js'); 
router.post('/login', function(req, res){ 
    io.to("someroom").emit("news", "news"); 
} 
+0

這存在服務器變量在socket.js中不可用的問題。它正在app中聲明。js like:var server = app.listen(app.get('port'),function(){ debug('Express server listening on port'+ server.address()。port); console.log(「Express服務器啓動!「); }); – Jorre 2014-10-17 08:18:46

+0

@Jorre立即結賬。從'app.js'導出服務器並在'socket.js'中要求。 – laggingreflex 2014-10-17 08:43:22

0
const io = require('socket.io').listen(server); 
app.set('io', io); 

,然後在路由器

router.get('/', (req, res) => { 
    req.app.get('io').to('someroom').emit('news', 'news'); 
});