簡體   English   中英

將變量從一個js傳遞到node.js中的另一個js文件

[英]Passing variable from one js to another js file in nodejs

我剛剛開始使用Nodejs,所以請多多包涵

我將數據庫設置存儲在第一個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變量從connect.js傳遞給dbManager.js ,因此我可以使用它來運行一些查詢。

上面的代碼返回一個錯誤,該錯誤表示該變量未成功傳遞給dbManager.js

ReferenceError: connectDB is not defined

提前致謝

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

例如,您不能執行以下操作,

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

你可以這樣做,

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

要訪問您可以執行的對象的屬性,

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

在您的代碼中,問題是在對象文字內聲明了一個變量。 could可以做的

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:-更改-使用module.exports功能不需要connectDB參數。

  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;
         **you can do it like this
            connection.js**


         var mysql=require('mysql');
         // Database Connection
         var connection = mysql.createConnection({
              host     : hostname,
              user     :username,
              password : password,
              database : databasename,
              multipleStatements:true
         });
         try {
                connection.connect();

             } catch(e) {
                  console.log('Database Connetion failed:' + e);
                    }

       module.exports=connection;


       **you can use this connection file in your dbmanager file like 
         this..**

         var db = require('./connection.js');var test_connection = 
               connection.query('SELECT * FROM test', function(err,result) { 
                         console.log(result);
                   });

這樣的事情對您有用嗎? 您可以擁有一個從池中返回連接對象的文件:

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();
});

這就是我存儲配置數據以在節點服務器上傳遞的方式。 我稱之為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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM