Как обернуть функцию node.js, чтобы получить к ним организованный доступ - PullRequest
0 голосов
/ 11 апреля 2020

Итак, я прихожу к этому, я хочу записать в БД и выполнить другие операции для работы с логами моей программы c, это руководство, которому я следую Node.js Создание класса :

//## This is my mysql_test.js file
function MySQL(){
var mysql = require('mysql'); 

var con = mysql.createConnection({
    //data omitted
});


function AppendRecordset (req, res){
    con.connect(function(err) {
      if (err) throw err;
      console.log("Connected!");      
      con.query(req, function (err, res) {
        if (err) throw err;
        console.log("1 record inserted");
      });
    });    
}

function UpdateRecordset (req, res) {
    con.connect(function(err) {
      if (err) throw err;      
      con.query(req, function (err, res) {
        if (err) throw err;
        console.log(result.affectedRows + " record(s) updated");
      });
    });    
}

function DeleteRecordset (req, res){
    con.connect(function(err) {
      if (err) throw err;      
      con.query(req, function (err, res) {
        if (err) throw err;
        console.log("Number of records deleted: " + result.affectedRows);
      });
    });    
}

function GetRecordset (req, res) {
    con.connect(function(err) {
      if (err) throw err;
      con.query(req, function (err, res, fields) {
        if (err) throw err;
        console.log(result);
      });
    });
}
}

Затем я имею в отдельном файле (ах) логи моего приложения c и хочу использовать то, что из вышеперечисленного, как объект / класс, поэтому я написал это в соответствии с этим руководством:

//##this is inside my main app file
//declare the sql processor
require('./mysql_test.js');
var DB = MySQL();
DB.AppendRecordset(sql_string, res);  //sql_string contains a valid SQL statement

Но когда я пытаюсь получить к нему доступ, используя `` я получаю это сообщение об ошибке: ReferenceError: MySQL is not defined что я делаю не так?

1 Ответ

0 голосов
/ 11 апреля 2020

Я думаю, что эти функции обрабатывают ваши маршруты, поэтому я не изменил их. Потому что я не знаю, как устроен ваш роутер.

Создайте файл dbHangler.js и напишите эту единственную функцию:

const mysql = require('mysql'); 

let con;

exports.execQuery = (query) => {
  return new Promise((resolve, reject) => {
    if(!con) {
      con = mysql.createConnection({
        //data omitted
      });
    }
    con.connect(function(err) {
        if(err) {
          reject(err);
        }
        else {
          console.log("Connected!");
          con.query(query, function (err, res) {
            if (err) {
              reject(err);
            }
            else {
              resolve(res);
            }
          });
        }
      });    
  });
};

В вашем файле dedicated.js теперь вы можете написать :

const dbObject = require('path/to/dbHandler');

function AppendRecordset (req, res){
    dbObject.execQuery(req)
      .then(result => {
        console.log(result.affectedRows + " record(s) updated");
      })
      .catch(error => {
        // handle error
      });
}

function AppendRecordset (req, res){
    dbObject.execQuery(req)
      .then(result => {
        console.log("Number of records deleted: " + result.affectedRows);
      })
      .catch(error => {
        // handle error
      });
}

function AppendRecordset (req, res){
    dbObject.execQuery(req)
      .then(result => {
        console.log(result);
      })
      .catch(error => {
        // handle error
      });
}

ОБНОВЛЕНИЕ

Надеюсь, этот поможет вам.

DbHandler.js

const mysql = require('mysql');

class DbHandler {
  constructor(config) {
    let self = this;
    self.dbConfig = config;
    self.connection = mysql.createConnection({
      //data omitted
    });
  }

  queryExecuter(query) {
    let self = this;
    return new Promise((resolve, reject) => {
      self.connection.connect(function (err) {
        if (err) {
          reject(err);
        }
        else {
          console.log("Connected!");
          self.connection.query(query, function (err, res) {
            if (err) {
              reject(err);
            }
            else {
              resolve(res);
            }
          });
        }
      });
    });
  }

  AppendRecordset(query) {
    let self = this;
    return self.queryExecuter(query)
      .then(result => {
        console.log("1 record inserted");
        return result;
      })
      .catch(error => {
        // handle error
        throw error;
      });
  }

  UpdateRecordset(query) {
    let self = this;
    return self.queryExecuter(query)
      .then(result => {
        console.log(result.affectedRows + " record(s) updated");
        return result;
      })
      .catch(error => {
        // handle error
        throw error;
      });
  }

  // and other functions
}

module.exports = DbHandler;

И используйте это как показано ниже:

let DB = require('/path/to/DbHandler');

let myDb = new DB(/* db config */);

db.UpdateRecordset('your query')
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...