2017-08-23 80 views
0

我剛開始接觸的NodeJS,所以請多多包涵傳遞變量從一個JS在其他的NodeJS js文件

我存儲在第一JS我的數據庫設置,connect.js

var mysql = require('mysql'); 

module.exports = function(connectDB) { 
    var connectDB = {}; 

    connectDB.connection = mysql.createConnection({ 
    //db params 
    }); 

    connectDB.connection.connect(function(err) { 
    if (err) { 
     console.error('error connecting: ' + err.stack); 
     return; 
    } 

    console.log('connected as id ' + connection.threadId); 
    }); 

return connectDB; 
}; 

然後我存儲我的另一個JS文件的查詢,讓我們把它叫做dbManager.js

var db = require('./connect')(connectDB); 

var test_connection = connectDB.connection.query('SELECT * FROM `test`', function (error, results, fields) { 
    console.log(results); 
}); 

exports.test = test_connection; 

我的目標是從傳遞connection變量到dbManager.js,所以我可以用它來運行一些查詢。

上面的代碼返回一個錯誤,這表示該變量沒有成功傳遞給dbManager.js:提前

ReferenceError: connectDB is not defined 

感謝

+1

聽起來像是你需要在2之間共享的公共配置文件,您可以更新和共享的東西在那裏。 –

+0

@JudsonTerrell我做了一些谷歌搜索,發現我可以做這樣的事情:https://stackoverflow.com/questions/28380561/how-to-pass-variables-into-nodejs-modules 上述代碼是我的實現,這是還沒有成型 –

+0

是完全相同。基本上是相同的概念。好找! –

回答

0

威爾這樣的事情對你的工作?您可以從池中返回一個連接對象的文件:

var mysql = require('mysql'); 

module.exports = function() { 
    var dbConfig = {...}; 
    var database = mysql.createPool(dbConfig); 

    return { 
     getConnection: function(callback) { 
      // callback(error, connection) 
      database.getConnection(callback); 
     } 
    }; 
}; 

你需要的地方使用它,你可以按如下要求它:

var connector = require('./db-connector')(); 

然後使用它是這樣的:

connector.getConnection(function(error, connection) { 
    // Some code... 

    // Be sure to release the connection once you're done 
    connection.release(); 
}); 
1

語法錯誤是因爲您無法在對象文本中使用var定義變量。

例如,你不能做到以下幾點,

var t = { 
    "r": 4, 
    var g = 5; 
}; 

你可以做到這一點,

var t = { 
    "r": 4, 
    "g" : 5 
}; 

並訪問你能做的對象的屬性,

console.log(t["r"]); 
console.log(t.g); 

在你的代碼中,問題是在對象文本中聲明一個變量。喲可以做,

var connectDB = {}; 
connectDB.connection = mysql.createConnection({ 
    //DB params 
}); 
connectDB.connection.connect(function(err) { 
    if (err) { 
    console.error('error connecting: ' + err.stack); 
    return; 
    } 

    console.log('connected as id ' + connectDB.connection.threadId); 
}); 

return connectDB; 

EDIT1按OP的評論,

connect.js: - Changes-沒有必要的connectDB PARAM,採用module.exports功能。

var mysql = require('mysql'); 
    var connectDB = {}; 

    connectDB.connection = mysql.createConnection({ 
    //db params 
    }); 

    connectDB.connection.connect(function(err) { 
    if (err) { 
     console.error('error connecting: ' + err.stack); 
     return; 
    } 

    console.log('connected as id ' + connectDB.connection.threadId); 
    }); 

module.exports = connectDB; 

dbManager.js: -

var db = require('./connect');//removed the parameter 
//use db variable to process queries as returned from the above require statement. 
var test_connection = db.connection.query('SELECT * FROM `test`', function (error, results, fields) { 
    console.log(results); 
}); 

exports.test = test_connection; 
+0

感謝您的幫助和解釋的屬性。我試圖按照你的指導,但仍然有一個錯誤。我更新了我的問題關於這個信息 –

+0

我沒有看到更新。你可以嘗試再次更新它。 –

+0

它在我的瀏覽器中更新。你可以嘗試刷新頁面嗎?由於 –

0

這是我如何存儲配置數據是傳遞我的節點服務器上。我把它稱爲config.js和.gitignore它。我保留一個名爲config.sample的示例副本。js

let config = {}; 
config.mysql-host='localhost' || process.env.MYSQL_HOST; 
config.mysql-user='me' || process.env.MYSQL_USER; 
config.mysql-secret='secret' || process.env.MYSQL_SECRET; 
config.mysql-database='my_db' || process.env.MYSQL_DB; 
module.exports = config; //important you don't have access to config without this line. 

要使用它,我會做以下事情。

const config = require('./config'); 
const mysql = require('mysql'); 

const connection = mysql.createConnection({ 
host: config.host, 
user: config.user, 
password: config.password, 

}); 

connection.connect((err) => { 
    if(err) { 
    console.error(`error connecting: ${err.stack}); 
    return; 
    } 
    console.log(`connected`); 
}); 

const test_connection = connectDB.connection.query('SELECT * FROM `test`'(error, results, fields) => { 
    console.log(results); 
});