我是Node.js的新手,所以这可能是一个基本问题,我错过了一些明显的东西。在下面的代码中,我试图从foo设置sql_file名称,但我不知道该文件存在错误,因为该变量不起作用。如果我在sql_util.js中硬编码文件名,它可以正常工作。
那么如何将参数或任何对象从一个js文件传递到另一个js文件的函数中呢?
foo.js
var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
sql_util.js
fs = require('fs');
file = 'on.sql'
function sql_file(cb) {
var fileName = "./SQLs/" + sql_file;
fs.readFile(fileName, function(err, buffer) {
if (err) return cb(err);
return cb(null, buffer.toString());
});
}
sql_file(function(err, sqlstatement) {
if (err) throw err;
console.log('sql statement is: ' + sqlstatement);
});
};
module.exports.x = x;
module.exports.sql_fil = sql_file;
答案 0 :(得分:3)
一些问题:
您需要sql_get但命名其他文件sql_util
var misc = require('./sql_util');
您正在导出module.exports.sql_fil = sql_file;
(请参阅缺少的e
)。你可能意味着;
module.exports.sql_file = sql_file;
在调用sql_file时,你传递一个字符串,但期望函数本身有一个cb -
misc.sql_file("on.sql", function(err, fileContent) {
if(err) return console.log(err);
console.log('File content: ', fileContent);
});
function sql_file(sqlFileName, cb) {
var fileName = "./SQLs/" + sqlFileName;
fs.readFile(fileName, function(err, buffer) {
if (err) return cb(err);
return cb(null, buffer.toString());
});
}
我不知道你在该文件中调用sql_file函数是做什么的。删除它。
答案 1 :(得分:3)
让我们逐行阅读,因为我看到很多错误,包括语法和语义。
<强> foo.js 强>
var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
您在sql_file
下面的函数中定义为异步,因此它不返回值,而是接受将结果传递给的回调函数。
<强> sql_util.js 强>
fs = require('fs');
file = 'on.sql'
您有一个未使用的模块全局变量file
。删除它。这会引起混淆。
function sql_file(cb) {
var fileName = "./SQLs/" + sql_file;
sql_file
是一个功能。我可以说,因为这段代码存在于一个名为sql_file
的函数中。因此,fileName将是“./SQLs/”+函数的.toString()
结果,这是函数的来源。我想也许你想要一个参数?
fs.readFile(fileName, function(err, buffer) {
if (err) return cb(err);
return cb(null, buffer.toString());
});
}
这似乎没问题。
sql_file(function(err, sqlstatement) {
if (err) throw err;
console.log('sql statement is: ' + sqlstatement);
});
};
我不确定你在这里要做什么。你为什么要调用这个函数?
module.exports.x = x;
module.exports.sql_fil = sql_file;
这两行都有问题。没有名为x
的符号定义。我很惊讶这段代码运行时没有在该行上抛出错误。其次,您将sql_file
导出为sql_fil
,错过了字母e。
解决方案
因为你问的是参数传递而你只有一个函数,让我们简化一下。你永远不想使用全局变量。如果函数需要特定变量,只需将其作为参数传递。
<强> foo.js 强>
var misc = require('./sql_get');
misc.sql_file('on.sql', function (err, contents) {
console.log(contents);
});
sql_get.js (注意文件已重命名)
var fs = require('fs');
function sql_file(sqlFilename, cb) {
var fileName = "./SQLs/" + sqlFilename;
fs.readFile(fileName, function(err, buffer) {
if (err) return cb(err);
return cb(null, buffer.toString());
});
}
module.exports.sql_file = sql_file;