Node.JS module.exports用于在两个函数之间传递参数?

时间:2014-03-07 13:57:07

标签: javascript node.js

我是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;

2 个答案:

答案 0 :(得分:3)

一些问题:

  1. 您需要sql_get但命名其他文件sql_util

    var misc = require('./sql_util');
    
  2. 您正在导出module.exports.sql_fil = sql_file;(请参阅缺少的e)。你可能意味着;

    module.exports.sql_file = sql_file;
    
  3. 在调用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());
        });
    }
    
  4. 我不知道你在该文件中调用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;