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

Javascript Node.JS module.exports用于在两个函数之间传递参数?,javascript,node.js,Javascript,Node.js,我是Node.js新手,所以这可能是一个基本问题,我遗漏了一些显而易见的东西。在下面的代码中,我试图从foo设置sql_文件名,但由于变量不起作用,我不断在不存在的文件上得到一个错误。如果我在sql_util.js中硬编码文件名,它可以正常工作 那么,如何将一个参数或任何对象从一个js文件传递到另一个js文件的函数中呢 foo.js var misc = require('./sql_get'); console.log(misc.sql_file("on.sql")); fs = requi

我是Node.js新手,所以这可能是一个基本问题,我遗漏了一些显而易见的东西。在下面的代码中,我试图从foo设置sql_文件名,但由于变量不起作用,我不断在不存在的文件上得到一个错误。如果我在sql_util.js中硬编码文件名,它可以正常工作

那么,如何将一个参数或任何对象从一个js文件传递到另一个js文件的函数中呢

foo.js

var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
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;
var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
fs = require('fs');
file = 'on.sql'
var misc = require('./sql_get');
misc.sql_file('on.sql', function (err, contents) {
    console.log(contents);
});
sql_util.js

var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
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;
var misc = require('./sql_get');
console.log(misc.sql_file("on.sql"));
fs = require('fs');
file = 'on.sql'
var misc = require('./sql_get');
misc.sql_file('on.sql', function (err, contents) {
    console.log(contents);
});
有几个问题:

  • 您需要sql\u get,但需要将另一个文件命名为sql\u util

    var misc = require('./sql_util');
    
  • 您正在导出
    module.exports.sql\u fil=sql\u文件(请参阅缺少的
    e
    )。你可能是说

    module.exports.sql_file = sql_file;
    
  • 调用sql_文件时,您正在传递一个字符串,但函数本身需要一个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_文件函数时在做什么。删除它。

    让我们逐行检查一下,因为我看到很多错误,包括语法和语义

    foo.js

    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    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;
    
    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    fs = require('fs');
    file = 'on.sql'
    
    var misc = require('./sql_get');
    misc.sql_file('on.sql', function (err, contents) {
        console.log(contents);
    });
    
    您在下面的函数
    sql\u file
    中定义为异步,因此它不返回值,而是接受一个回调,并将结果传递给该回调

    sql_util.js

    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    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;
    
    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    fs = require('fs');
    file = 'on.sql'
    
    var misc = require('./sql_get');
    misc.sql_file('on.sql', function (err, contents) {
        console.log(contents);
    });
    
    您有一个未使用的模块全局变量
    文件
    。去掉这个。这会引起混乱

    function sql_file(cb) {
        var fileName = "./SQLs/" + sql_file;
    
    sql\u文件
    是一个函数。我可以说,因为这段代码存在于一个名为
    sql\u file
    的函数中。因此,文件名将是“/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\u文件
    导出为
    sql\u文件
    ,缺少字母e

    解决方案

    因为您所问的是参数传递,并且您只有一个函数,所以让我们简化它。您永远不想使用全局变量。如果函数需要一个特定的变量,只需将其作为参数传递即可

    foo.js

    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    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;
    
    var misc = require('./sql_get');
    console.log(misc.sql_file("on.sql"));
    
    fs = require('fs');
    file = 'on.sql'
    
    var misc = require('./sql_get');
    misc.sql_file('on.sql', function (err, contents) {
        console.log(contents);
    });
    
    sql\u get.js(注意文件已重命名)


    变量/属性名周围的*是怎么回事?假设是粗体的。感谢这段代码充满了打字错误、未定义的变量引用和错误的文件名。我建议先清理代码,看看它是否有效,然后再担心参数传递。就像我说的,我是新手,所以我感谢反馈,谢谢!我想将调用放回var reader=connection.reader(“SELECT*FROM ON”,[]),以保持代码整洁,使其看起来像connection.reader(sql_文件(“ON.sql”))。阅读原始sql文件并使用sql文件中的选择权。Brandon,我来自一个Visual Basic世界,它就是这样一个学习曲线,我一直在阅读Node.ja,这很好,但有点过头了。今天我有Sams学习Node.Js。实际上,这是你指出的我需要关注的基本面。我现在只在js工作了大约一周,所以你的反馈非常好,谢谢你抽出时间!如果你能推荐其他好的文学作品或练习,我将不胜感激。。谢谢你。特别是JavaScript和node.js是单线程的,扩展并发性的诀窍是使用回调进行异步I/O。我建议研究回调,因为在VB中可能没有接触过回调。