I'm getting the error while running the following code in 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[];
}];
The index.js
file contain the following code:
function AddNumbers[a,b]{
return a+b;
}
What am I doing wrong?
hong4rc
3,8734 gold badges19 silver badges38 bronze badges
asked Nov 23, 2015 at 6:42
1
This happened to me many times because of circular dependency, check if you have 2 classes that are requiring each other, remove one of them from requiring the other and the issue should be solved
answered Jun 17, 2016 at 16:43
shimi_tapshimi_tap
7,6925 gold badges22 silver badges23 bronze badges
9
With NodeJS modules, to make something
public, you have to export it. Add this to the end of index.js
:
module.exports.AddNumbers = AddNumbers;
[That's using the old CommonJS modules. For ESM, it would be export AddNumbers;
]
Here it is running on my machine:
$ 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
answered Nov 23, 2015 at 6:46
T.J. CrowderT.J. Crowder
981k180 gold badges1826 silver badges1800 bronze badges
2
I'm fairly a beginner at Node JS so I managed to get this error by importing a function like so:
const { functionName } = require['./function']
instead of like so:
const functionName = require['./function']
Editing my post to add an explanation since I've learned more node since I wrote it. If a module exports an object containing multiple functions functions like so:
module.exports = { functionName, otherFunction }
Then the function has to be deconstructed out of the object during the import, as in the first code snippet. If the module exports a single function or a default function, like so:
module.exports = functionName
Then tt must be imported directly, as in the second code snippet.
answered Apr 7, 2020 at 14:51
Tanya BranaganTanya Branagan
4711 gold badge10 silver badges20 bronze badges
1
If you need to expose a specific component, function or a variable to public. You have to exports
those components using JavaScript modules.
let add = [a,b]=>{
return [ a+b];
}
module.exports.add=add;
or if you want to expose multiple functions, you can do as follows.
let add = [a,b]=>{
return [a+b];
}
let subtract = [a, b]=>{
return [a-b];
}
module.exports={
add : add,
subtract : subtract
};
answered Nov 11, 2018 at 6:38
This is happening because two files are referencing each other i.e You are calling function [s] from file A in file B and vice versa which is called Circular Dependency.
answered Jun 24, 2020 at 13:04
p_zheeyp_zheey
511 silver badge2 bronze badges
Your "AddNumbers" function in the "index.js" file should be as follows,
function AddNumbers[a,b]{
var addition = function[a, b]{
return [a + b] ;
};
module.exports = {
additionResult: addition
};
}
And you need to call it in your "Node.js" file as follows
var assert = require['assert'];
var request = require['request'];
var index = require['./index'];
it['verify javascript function', function[done] {
var v2 = index.additionResult[5, 6];
assert.equal[11, v2];
done[];
}];
This should work. Please note that you call the function by whatever the token name you exported the return value by [I use a different name here just for clarity]. Almost everybody uses the same name as the function name so there are no confusion. Also in ES6, if you use the same name you can export as just,
module.exports = {
addition
};
instead of,
module.exports = {
addition: addition
};
since you use the same name. It is an ES6 feature.
answered Feb 19, 2019 at 16:24
I ran into the same problem while trying to follow a Nodejs tutorial by w3schools. I copied the following code from them:
exports.myDateTime = function [] {
return Date[];
};
That, however, wouldn't work for me. What resolved the problem for me was adding
module.
before the exports keyword like this:
module.exports.myDateTime = function [] {
return Date[];
};
answered Nov 28, 2020 at 20:26
JimmyJimmy
7068 silver badges22 bronze badges
The most correct answer was from @shimi_tap. I want to reply it as comment, but doesn't have enough reputation, so I am gonna answer it using a simple example, like in this case below:
- File A has 3 functions to process database activity: function
addDB
,updateDB
, anddelData
; - File B has 2 functions to process User activity on smartphone: function
addHistory
, andeditHistory
;
Function updateDB
in file A is calling
function editHis
in file B, and function editHistory
is calling function updateDB
in file A. This is what we called circular-dependency. And we need to prevent it by only giving output of state from editHistory
and the rest will be processed inside file A.
//ORIGINAL FUNCTIONS which caused CIRCULAR DEPENDENCY
function updateDB[] {
//process update function here
//call function in fileB
const history = require["fileB.js"];
await history.editHistory[data].then[[output] => {
if[output["message"] === "success"]{
response = {
state: 1,
message: "success",
};
}
}];
return response;
}
//THIS is the WRONG ONE
function editHistory[] {
//process function to edit History here
//call function in fileA
const file = require["fileA.js"];
await file.updateDB[data].then[[output] => { //You should not call it here
if[output["message"] === "success"] {
output = {
state: 1,
message: "success",
};
}
}];
return output;
}
//==================================================//
//THE FIX
function updateDB[] {
//process function here
const history = require["fileB.js"];
await history.editHistory[data].then[[output] => {
if[output["message"] === "success"]{
await updateDB[data].then[[output] => {
response = {
state: 1,
message: "success",
};
}];
} else {
log["Error"];
}
}];
return response;
}
function editHistory[] {
//process function to edit History here
// No more calling to function inside the file A
output = {
state: 1,
message: "success",
};
return output;
}
answered Sep 12 at 9:55
WegeWege
176 bronze badges
1
A simple way I debugged this [After about 2 days of troubleshooting] was to actually see why 'x' is not a function. Basically, console.log[x] to see the actual object returned. Turned out I was conflicting x with another declared variable [happens especially when you use axios.res and req,res args.
answered May 31, 2021 at 2:34
just pass the function as an argument it will solve your Problem
now you can access the sample function without having to require it in sample2 file this solves the problem of typeError
//sample
const sample2 = require['./sample2'];
const sample = async [payload] => {
const { value }= payload;
const response = sample2[{sample}];
}
// sample2
const sample2 = async [{sample}] => {
const response = sample[{value}];
}
module.exports = sample2;
bguiz
25.4k45 gold badges150 silver badges234 bronze badges
answered Jun 11, 2021 at 7:30
1
One silly mistake I did was while exporting was:
module.exports = [module_name_1, module_name_2, ..., module_name_n]
The right way is:
module.exports = {module_name_1, module_name_2, ..., module_name_n}
answered Aug 31, 2020 at 17:55
2