为什么变量在导入的文件中不可见?

时间:2016-01-26 20:45:44

标签: javascript node.js mocha node-mysql

main.js中有一段代码:

var test_mysql = require('./test_mysql.js')
... //some code
    before(function(){
        test_mysql.preparingDB(test_mysql.SQL_query.clear_data); // or test_mysql.preparingDB(SQL_query.clear_data); 
    });

test_mysql.js中的代码:

var SQL_query = require('./SQL_query.js');
...//some code
exports.preparingDB = function(query){
    connection.connect(function(err){
        if (err){
            console.error('Error connecting: ' + err.stack);
            return;
        }
        console.log('Connected as id ' + connection.threadId);
    });
    console.log(query);  
    connection.query(query, function(err){
        if (err){       
            console.error('Error: ' + err.stack);
            throw err; /*не уверена, что оба сработают*/
        }
        console.log('Database preparation completed');
    });

SQL_query.js中的代码:

exports.clear_data = 'SET FOREIGN_KEY_CHECKS=0;  -- \
TRUNCATE TABLE `billing_payment_gateway`;  -- \
TRUNCATE TABLE `fos_user`;  -- \
TRUNCATE TABLE `billing_account_has_product`;  -- \
TRUNCATE TABLE `billing_account`;  -- \
TRUNCATE TABLE `billing_product`; -- \
SET FOREIGN_KEY_CHECKS=1;'

当我尝试运行main.js时,我收到错误。第一种情况是TypeError: Cannot read property 'clear_data' of undefined。 在另一个案例中是ReferenceError: SQL_query is not defined

为什么呢?什么问题?

P.S。好。请跟我解释一下。有人。在test_mysql.js中还需要var mysql = require('mysql');为什么在main.js中可以看到此模块????

1 个答案:

答案 0 :(得分:2)

test_mysql.js只导出preparingDB,因此这是此模块中唯一可以从外部获取的内容。

如果您希望从需要的模块

中获取SQL_query变量,您还应该导出它