2014-10-01 55 views
0

我想給socket.io對象從我的快遞不能稱之爲「上」的未定義(表達和socket.io)

我app.js文件app.js導出方法是在這裏:http://pastebin.com/Kfny4yVK

我斌/ WWW文件是在這裏:http://pastebin.com/qGhPm6KE

在我app.js我做的:

var app = express(); 
var http = require("http").Server(app); 
var io = require("socket.io")(http); 
exports.io = io; 

在routes文件我做的:

var io = require(__dirname+'/../app.js').io; 

然而,當我打電話:

io.on 

我得到一個未定義的對象錯誤。任何想法爲什麼發生這種情況?它看起來像nodejs以某種方式修改導出時的io對象?這可能嗎?有沒有辦法做到這一點?

+0

代碼獨立運作正常。沒有進一步看到你的應用程序,我只能猜測,但可能你的路線模塊正在加載,然後應用程序可以實例化io服務器。 – 2014-10-01 23:09:14

+0

您必須從其他模塊能夠訪問的apps.js導出變量。 – jfriend00 2014-10-02 00:02:43

+0

傑夫,我正在添加我的app.js和bin/www文件,我認爲你是在正確的軌道上。但我仍然不知道這一個 – kfk 2014-10-02 05:48:28

回答

2

使用Express v4.x我使用以下命令導出socket.io對象。

APP.JS

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
//Export sio module so socket.io can be used in other modules 
module.exports.sio = io; //ADDED this 

OTHER_FILE.JS

//Import sio module from app.js 
var io = require('../app.js').sio; 
+0

謝謝,這與我上面的設置有什麼不同? – kfk 2014-10-02 05:48:44

+0

是的,module.exports.io = io和exports.io = io應該完全一樣。但是這個代碼在socket.io V1.x和Express v4.x中肯定適用於我。我知道你正在尋找一個io對象,但必須確保檢查server.js需要路徑。添加var path = require('path')。 console.log(「__ dirname +'/ ../app.js'=%s」,path.resolve(__ dirname +'/ ../app.js'));你應該看到server.js的路徑。如果是這樣的話,我認爲你的代碼沒有問題,其他地方的問題也是存在的。 – 2014-10-02 13:03:26