NodeJS:module.exports属性不是函数

时间:2014-01-13 13:49:15

标签: javascript node.js

我在模块文件中有以下内容:

module.exports = {
    myfunc: myfunc
};

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

在另一个文件中,我得到了对该模块的引用

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

当我调用mymodule.myfunc()时,我收到一条错误,说“属性'myfunc'不是函数”。 这仅在导出的函数中发生。同一个模块导出一些'字符串'字段,这些字段工作正常。

2 个答案:

答案 0 :(得分:17)

分配module.exports时,myfunc功能仍未定义。在声明之后尝试分配它:

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

module.exports = {
    myfunc: myfunc
};

答案 1 :(得分:7)

要保留文件顶部的module.exports的原始排序,请将var myfunc 初始化更改为function myfunc 声明,后者 悬挂

module.exports = {
    myfunc: myfunc
};

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

声明 悬挂 ,但初始化不是,这就是原始示例不起作用的原因。 w3schools对JavaScript Hoisting有实际描述。