2015-09-04 72 views
3

所有:初學者感到困惑的Express模塊​​結構和socket.io

我是新來的Node.js,當知道整合Socket.io到Express.js,有關於模塊化一個問題困惑了我這麼多:

我用默認 Express.js項目結構,主要js文件涉及我搞不清是:

app.js:定義請求處理程序,並使用module.exports =應用;作爲一個模塊。

bin/www:需要app.js,設置並配置http服務器。

一切看起來都很模塊化。

但是,當涉及到Socket.io整合,這個結構開始迷惑我:

從Socket.io文檔:

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

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

由於socket.io需要服務器variabe,所以我想出這個代碼應該在www文件中,但是我也想將io事件處理部分模塊化成模塊,但是我不知道如何將www變量導出到www,因爲它需要來自www的可變服務器。

我想知道:這是否意味着我必須保持www文件中的所有socketio事件處理代碼?任何人都可以給我一些代碼來展示如何模塊化?

PS:感謝您通過並給出了對此進行反對的投票,這證明這是一個入門級問題或無價值的問題,但請將您的迴應留在您的投票中,因爲入門非常重要像我這樣的初學者。

感謝

回答

2

的套接字代碼的組織不一定是直觀的,但你可以把它看作類似事物的HTTP側和功能通常提供路線的方式。

請注意,您只是提供了一個函數「io.on」。所以,你可以做這樣的事情。在一個單獨的文件創建一個模塊,爲您的socket函數...

// File named socket_funcs.js 
module.exports.connection = function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
}); 
在app.js

然後文件,你可以做到這一點...

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var sf = require('./socket_funcs.js'); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.on('connection', sf.connection); 

我沒有投票下你的問題。對初學者來說,這似乎是一個適當的問題。