Node.js中的'TypeError:不是函数'

Kar*_* Gk 39 javascript node.js

我在Node.js中运行以下代码时收到错误

var assert = require('assert');
var request = require('request');
var index = require('./index');
it('verify javascript function', function(done) {
    var v2 = index.AddNumbers(5, 6);
    assert.equal(11, v2);
    done();
});
Run Code Online (Sandbox Code Playgroud)

index.js文件包含以下代码:

function AddNumbers(a,b){
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

shi*_*tap 88

这种情况多次发生在我身上,因为循环依赖,检查你是否有2个需要彼此的类,从中删除其中一个需要另一个,问题应该解决

  • 从很多方面来说,这都是节点的故障,但与往常一样,最重要的故障是无意义且具有误导性的错误消息。 (4认同)
  • 你今天救了我:) (2认同)

T.J*_*der 36

使用NodeJS 模块,要将某些内容公开,您必须将其导出.将此添加到以下结尾index.js:

module.exports.AddNumbers = AddNumbers;
Run Code Online (Sandbox Code Playgroud)

它在我的机器上运行:

$ cat index.js 
function AddNumbers(a,b){
    return a+b;
}

module.exports.AddNumbers = AddNumbers;

$ cat example.js 
var index = require('./index');
var v2 = index.AddNumbers(5,6);
console.log(v2);

$ node example.js
11

  • @KarthickGk:那么还有其他问题,上面的工作正常。 (2认同)

Tan*_*gan 9

我是 Node JS 的初学者,所以我通过导入这样的函数设法得到了这个错误:

const { functionName } = require('./function')
Run Code Online (Sandbox Code Playgroud)

而不是这样:

const functionName = require('./function')
Run Code Online (Sandbox Code Playgroud)

编辑我的帖子以添加解释,因为自从我写它以来我学到了更多的节点。如果一个模块导出一个包含多个函数的对象,如下所示:

module.exports = { functionName, otherFunction }
Run Code Online (Sandbox Code Playgroud)

然后必须在导入期间从对象中解构函数,如第一个代码片段所示。如果模块导出单个函数或默认函数,如下所示:

 module.exports = functionName
Run Code Online (Sandbox Code Playgroud)

然后 tt 必须直接导入,如第二个代码片段所示。


Ara*_*chi 7

如果您需要向公共公开特定的组件、函数或变量。您必须exports使用 JavaScript 模块来处理这些组件。

let add = (a,b)=>{
    return ( a+b);
}
module.exports.add=add;
Run Code Online (Sandbox Code Playgroud)

或者如果你想暴露多个函数,你可以这样做。

let add = (a,b)=>{
    return (a+b);
}
let subtract = (a, b)=>{
    return (a-b);
}
module.exports={
   add : add,
   subtract : subtract
};
Run Code Online (Sandbox Code Playgroud)


小智 7

发生这种情况是因为两个文件相互引用,即您正在文件 B 中调用文件 A 中的函数,反之亦然,这称为循环依赖。