NodeJS:module.exports属性不是函数

Ida*_*dan 11 javascript node.js

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

module.exports = {
    myfunc: myfunc
};

var myfunc = function(callback){    
        callback(err,reply);    
};
Run Code Online (Sandbox Code Playgroud)

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

var mymodule = require('./modules/mymodule');
mymodule.myfunc(function(err, reply){ ... });
Run Code Online (Sandbox Code Playgroud)

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

Aio*_*ros 20

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

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

module.exports = {
    myfunc: myfunc
};
Run Code Online (Sandbox Code Playgroud)

  • 好吧,那令人尴尬..谢谢. (9认同)

Ken*_*Lin 8

要保留文件顶部的module.exports的原始顺序,请将var myfunc 初始化更改为function myfunc 声明,以便后者被提升.

module.exports = {
    myfunc: myfunc
};

function myfunc(callback){    
    callback(err,reply);    
};
Run Code Online (Sandbox Code Playgroud)

声明被提升,但初始化不是,这就是为什么你的原始示例不起作用的原因.w3schools有JavaScript提升的实用描述.