2014-06-26 170 views
0

我有2個javaScript文件。 我試圖調用從一個文件到另一個文件的方法,但我得到一個錯誤,我的方法不存在(「TypeError:Object#has no method'getServer'」)。從外部JavaScript文件調用方法

有從第一個文件的方法:

function getServer(app, server) 
{ 
    var socket = require("socket.io"); 
    app.get("/", function(request, response) { 
    if(request.accepts("text/html")) 
    { 
     app.use(express.static(__dirname + '/')); 
     response.sendfile(__dirname + "/index.html"); 
    } 
    }); 

    var io = socket.listen(server); 
    io.sockets.on('connection', function(client) { 
    ............................................ 
    ............................................ 
    }); 

有第二個文件的方法調用:

var msgServer = require('./firstFile.js'); 
msgServer.getServer(app, server); 

在第一個文件我連接到服務器並偵聽港口。 我想將此服務器發送到secont文件。 我需要第二個文件中的服務器和應用程序才能使用socket.io。

感謝答覆(:

+1

第一個文件是否將getServer封裝在另一個變量和/或f中unction還是它在全局命名空間? – joshboley

+2

你是在設置'module.exports.getServer = getServer'還是爲'module.exports'創建一個包含'getServer'的新對象。 –

+0

它位於全局命名空間中。 – user3491963

回答

0

您必須使用exports VAR:

exports.getServer = function(app, server) 
{ 
    var socket = require("socket.io"); 
    app.get("/", function(request, response) { 
    ............................................ 
    ............................................ 
    }); 

它允許您設置此功能avalaible每個文件

另一種方式來做到這一點。

module.exports = { 
    getServer: funnction(app, server){...} 
} 
+2

有關更多信息,請參見:[模塊:模塊對象](http://nodejs.org/api/modules.html#modules_the_module_object)。 – dc5

+0

另外,我幾乎總是會推薦'module.exports'語法。簡單的「出口」只是一個參考(別名),可能會被意外覆蓋,導致不清楚的情況和問題。我認爲這是最佳實踐。 – Zlatko