我在下面的代码中做错了什么?
//File1.js
var arr = [];
function insertName {
var name = "josh";
arr.push(name);
return name;
};
function validName(key) {
var index = arr.indexOf(key);
if (index == -1) {
return false;
} else {
return true;
}
}
var result = insertname();
exports.arr = arr;
exports.validName = validName;
//File2.js
var file1 = require("./File1.js");
var name = "josh";
var verify = file1.validName(name);
if(verify) {
cosnole.log("Valid name");
}else {
console.log("Error");
}
node File1.js
node File2.js
当我执行File2.js时,我没有为arr []定义。有人能帮助我,我在下面的代码中做了什么
答案 0 :(得分:1)
Node.js模块保留您在其顶层声明的变量,直到模块为Garbage Collected或您手动删除它们。如果查看File1.js
,则表示您正在导出数组对象,而不是其他任何内容。所以当你说
var file1 = require("./File1.js");
file1
只是对具有arr
属性的JavaScript对象的引用。您可以通过打印file1
来检查这一点。您在File1
中创建的功能永远不会导出。所以,你可以像这样修复它*
exports = module.exports = {
validName: validName,
insertName: insertName
}
现在,您正在导出函数,他们仍然可以访问arr
变量。从File2
开始,您可以像这样调用insertName
file1.insertName();
if (file1.validName("josh")) {
console.log("Valid name");
} else {
console.log("Error");
}
*要详细了解exports
和module.exports
,您可以查看my blog post关于此
答案 1 :(得分:1)
您的代码包含错误会更改您的代码,如下所示
File1.js
var arr = [];
function insertName() {
var name = "josh";
arr.push(name);
return name;
};
function validName(key) {
var index = arr.indexOf(key);
if (index == -1) {
return false;
} else {
return true;
}
}
var result = insertName();
exports.validName = validName;
File2.js
var file1 = require("./File1.js");
var name = "josh";
var verify = file1.validName(name);
if(verify) {
console.log("Valid name");
} else {
console.log("Error");
}
答案 2 :(得分:0)
您可以简单地使用global。(name)=(value)
示例:
<强> main.js 强>
global.foo = 1;
require('./mod.js').show();
<强> mod.js 强>
module.exports = {
show : function(){
console.log(global.foo); // which prints "1"
}
}