2016-05-19 6 views
0

私はそれに似た質問があることを知っていますが、私を助けてくれるものは見つかりません。 Expressjs 4アプリがあり、SocketIOも使用しています。リファクタリングExpressとSocketIOアプリケーション

// server.js 
... 
var app = express(); 
var server = require('http').createServer(app).listen(process.env.PORT || 8080); 
var io = require('socket.io')(server); 

var routesApi = require('./server/routes/api'); 

module.exports = app; 

と私はapi.js持っている:私のserver.jsファイルのスニペットは、次のようになります

// server/routes/api.js 
... 
var ctrlPosts = require('../controllers/posts'); 
router.post('/posts', ctrlPosts.create); 
... 

を、私の記事コントローラ:どのように私はSocketIOにアクセスすることができます

// controllers/posts 
module.exports.create = function(req, res) { 
    //how can I access io from here? 
} 

質問私の投稿のコントローラから?

答えて

1

あなたの投稿コントローラを設計して、コンストラクタのパラメータを受け入れることができます。これと同様に

var controller = function(server){ 
    var io = require('socket.io')(server); 
    var module = { 
     create : function(req, res) {...} 
    } 
    return module; 
} 

は、サーバーのパラメータを受け入れ、このようなポストコントローラを呼び出すために、あなたのルートのAPIを設計することができます。

var api = function(server){ 
    var ctrlPosts = require('../controllers/posts')(server); 
} 

と、このようなAPIが必要になります。

var routesApi = require('./server/routes/api')(server); 
+0

おかげでそれを呼び出す、これは便利だった - 私は 'api.js'ファイルに' server.js'から 'io'を通過した後、ポストコントローラに。 – tommyd456

+0

@ tommyd456それがあなたを助けたら答えを受け入れてください。 – n32303

1

の作成設定ディレクトリとエクスポートディレクトリのsocket.js

// socket.js 
var socketio = require('socket.io') 

module.exports.listen = function(app){ 
    io = socketio.listen(app) 

    posts = io.of('/posts') 
    posts.on('connection', function(socket){ 
     socket.on ... 
    }) 

    return io 
} 
その後、

とは、あなたのコントローラで

// controller 
var io = require('./config/socket').listen(app) 
関連する問題