2014-01-13 68 views
3

在一個模塊文件我有以下幾點:的NodeJS:module.exports屬性不是一個功能

module.exports = { 
    myfunc: myfunc 
}; 

var myfunc = function(callback){  
     callback(err,reply);  
}; 

在其他文件中,我得到了參考該模塊

var mymodule = require('./modules/mymodule'); 
mymodule.myfunc(function(err, reply){ ... }); 

當我打電話mymodule.myfunc()我得到一個錯誤,說「屬性'myfunc'不是一個函數」。 這僅在導出的函數中發生。相同的模塊導出一些'字符串'字段,這些工作正常。

回答

11

當您指定module.exports時,myfunc函數仍未定義。嘗試聲明之後爲它分配:

var myfunc = function(callback){  
    callback(err,reply);  
}; 

module.exports = { 
    myfunc: myfunc 
}; 
+6

好吧,那真是令人尷尬..謝謝。 – Idan

3

要在你的文件的頂部保留原始module.exports的排序,你var myfunc初始化改變function myfunc聲明使後者是懸掛

module.exports = { 
    myfunc: myfunc 
}; 

function myfunc(callback){  
    callback(err,reply);  
}; 

聲明,懸掛,但初始化都沒有,這就是爲什麼你原來的例子沒有工作。 w3schools有JavaScript Hoisting的實際說明。