2016-01-26 51 views
0

有在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 A碼:

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 A碼:

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中可見?

+0

從聲明中刪除'var'和檢查出來。使SQL_query全局爲'window.SQL_query'。檢查一下,看看它是否有效 – dvenkatsagar

+0

有沒有其他方法可以解決這個問題?我並不想污染全局名稱空間。 – Valentina

+0

@NirLevy給出的答案應該可以做到。 – dvenkatsagar

回答

2

在您的test_mysql.js中,您僅導出preparingDB,因此這是該模塊唯一可從外部獲取的。

你也應該,如果你想它可以導出SQL_query變量從需要的模塊

+0

但是test_mysql.js查詢SQL_query.js並不意味着在啓動test_mysql.js的過程中,它會查詢SQL_query.js並將其添加到緩存中?這種行爲似乎對我來說很合理。 – Valentina

+0

我不喜歡多個使用依賴關係的想法。我怎麼能比解決這個問題做得更好? – Valentina

相關問題