导入模块错误不是函数?

时间:2017-01-25 10:44:51

标签: node.js

我有要导出的文件' item-state-manager.js':

module.exports.aggregate_states = function (member_states) {
    console.log(member_states);
 }

其他文件应导入此模块并使用函数' aggregate_states':

var aggregate_states = require("./item-state-manager.js")

module.exports.saveItem = function () {
 var aggregate = aggregate_states("state");
}

但我收到错误:

TypeError: aggregate_states is not a function

我是否导入' item-state-manager.js'错?

5 个答案:

答案 0 :(得分:5)

据我所知,需要返回module.exports对象。

如果aggregate_states是您要导出的唯一功能,请使用此功能。

module.exports = function (member_states) {
    console.log(member_states);
}

否则就像这样导入它。

var aggregate_states = require("./item-state-manager.js").aggregate_states;

答案 1 :(得分:1)

您没有正确导入模块。使用

直接导入功能
var aggregate_states = require("./item-state-manager.js").aggregate_states;

或导入模块并调用函数

var stateManager = require("./item-state-manager.js");
// And use it like this
stateManager.aggregate_states(/*...*/)

如果您使用的是最新版本的节点,也可以执行

const { aggregate_states } = require("./item-state-manager.js");

答案 2 :(得分:0)

试试这个:

var aggregate_states = require("./item-state-manager.js").aggregate_states;

module.exports.saveItem = function () {
 var aggregate = aggregate_states("state");
}

aggregate_states只是整个返回模块的属性,当您需要获得整个模块Object时,如下所示:

{
    aggregate_states: function() {...}
}

答案 3 :(得分:0)

最近我在一个项目上运行(最小)我的测试套件时遇到了同样的错误,TypeError: (0 , _store.withToken) is not a function。令人困惑的是,函数 withToken 在许多测试中都很好,但在其他测试中却没有。

经过大量挖掘,我终于将其缩小为 cyclical dependency 的问题。

重构我的代码以便删除循环依赖解决了问题并且错误消失了。具体来说,我不得不将一些相互引用的文件合并到一个更大的文件中,这有点不整洁,但消除了这个问题。

在我的例子中,因为我的 withToken 函数引用了 store,而 store 引用了 withToken,所以不能同时设置这两个函数,所以为了设置 storewithToken 需要导入,而要使用 withToken,它需要导入的 store

答案 4 :(得分:-1)

------在导出文件中

声明要正常导出的功能... 函数aggregate_state(member_states)

在该.js文件末尾添加... module.exports = { gregation_state:aggregate_state, }

------在导入文件中

导入所需文件... constgregation_states = require(“ ./ item-state-manager.js”);

称呼它... item-state-manager.aggregate_state(member_states);