Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2023, 06:05
Интересующийся
Отправить личное сообщение для tarabukinivan Посмотреть профиль Найти все сообщения от tarabukinivan
 
Регистрация: 17.08.2017
Сообщений: 19

Mysql Pool. Правильно закрыть соединения после запроса
Привет!
Имею такой код:
index.js
Код:
const rp = require('request-promise');
require('dotenv').config()
const TelegramApi = require('node-telegram-bot-api')
const bot = new TelegramApi(process.env.BOT_TOKEN, {polling: true})
var db = require('./my_sql_connect.js');
const cron = require("node-cron");
const propotkl=5;
bot.setMyCommands([
  {command: '/add', description: 'Add node: /add xxx.xxx.xxx.xxx:9000'},
  {command: '/delete', description: 'Delete node: /delete xxx.xxx.xxx.xxx:9000'}, 
  {command: '/notif', description: 'show logs'},
  {command: '/notifoff', description: 'hide logs'},  
  {command: '/my', description: 'your nodes'}
])

 const start = () => {
    bot.on('message', async msg => {
      const text = msg.text;     
      /* if(msg.from.id != chatId){
        return bot.sendMessage(msg.from.id, 'создайте своего бота, в инструкции же написано!');
      } */
      //console.log(msg)
      if(text === '/start'){
        return bot.sendMessage(msg.from.id, `Welcome to Sui testnet checker bot`)
      }

      if(/^\/add\s([0-9]{1,3}[\.]){3}[0-9]{1,3}[\:]{1}[0-9]{4,5}$/.test(text)){
        var ip=text.replace("/add ", "").trim();          
            const sql = `INSERT INTO userip(userid,ipu) VALUES (?, ?);`
            db.query(sql, [msg.from.id,ip],function(err, resp) {
              if(err) {
                bot.sendMessage(msg.from.id,'failed to add data | не удалось добавить данные')             
                return console.log(err);
              }
              bot.sendMessage(msg.from.id,`ip ${ip} added to user ${msg.from.id}`)
              console.log('Inserted ')
            })
        return
      }

      if(text === '/my'){
        console.log("нажат my")  
          console.log("базу прошли")
          
            const sql = `SELECT ipu FROM userip WHERE userid=?`;
            db.query(sql, [msg.from.id],function(err, resp) {
              if(err) {
                bot.sendMessage(msg.from.id,'не удалось достать данные | failed to retrieve data')             
                return console.log(err);
              }
              //bot.sendMessage(msg.from.id,`ip ${ip} добавлен к юзеру ${msg.from.id}`)
              if(resp && resp!=''){
                resp.map((ip)=>{                  
                  bot.sendMessage(msg.from.id,`Ваши ip ${ip.ipu}`)
                })
              }else{
                bot.sendMessage(msg.from.id,`You haven't added an ip yet | Вы еще не добавили ip`)
              }              
            })
        return
      }

      if(text === '/notif'){  
            let tmpsql=`UPDATE userip SET worked=0 WHERE userid=?`;
            db.query(tmpsql, [msg.from.id],function(err, resp) {
              if(err) {                          
              return console.log(err);
              }
              bot.sendMessage(msg.from.id, `Sending logs is enabled`)
            })
      }

      if(text === '/notifoff'){
            let tmpsql=`UPDATE userip SET worked=1 WHERE userid=?`;
            db.query(tmpsql, [msg.from.id],function(err, resp) {
              if(err) {                          
              return console.log(err);
              }
              bot.sendMessage(msg.from.id, `Sending logs is disabled`)
            })
        return
      }

      if(/^\/delete\s([0-9]{1,3}[\.]){3}[0-9]{1,3}[\:]{1}[0-9]{4,5}$/.test(text)){
        var ip=text.replace("/delete ", "").trim();
            const sql = `DELETE FROM userip WHERE ipu=? AND userid=?;`
            db.query(sql, [ip,msg.from.id],function(err, resp) {
              if(err) {
                bot.sendMessage(msg.from.id,'failed to delete ip | не удалось удалить ip')             
                return console.log(err);
              }
              if(resp.affectedRows>0) {
                bot.sendMessage(msg.from.id,`ip ${ip} deleted`)
              }else{
                bot.sendMessage(msg.from.id,`ip ${ip} not found`)
              }
              console.log('Deleted:')
            })
        return
      }

      return bot.sendMessage(msg.from.id, `Unknown command`)      
    })
  }
  
  start()
async function curl(val){
  const ip = `http://${val}`
  var options = { 
    method: "POST", 
    //uri: "https://fullnode.testnet.sui.io:443", 
    uri: ip,
    body: { "jsonrpc":"2.0", "method":"sui_getTotalTransactionNumber","id":1},
    headers:{"Content-Type":"application/json"},
    json: true
    }
    try{
      let tmp = await rp(options)
      console.log(ip," :ответил", tmp.result)
      return(tmp)
    }catch{
      console.log(ip," :неотвечает")
    }
}
  cron.schedule('*/1 * * * * *', async () => { 
    let bddata;
        console.log("зашли читать БД");
        const sql = `SELECT * FROM userip`;
        db.query(sql, '',function(err, resp) {
          if(err) {
            //bot.sendMessage(msg.from.id,'не удалось добавить данные')             
            return console.log(err);
          }
          bddata =resp
          //console.log(bddata)          
          if(bddata && bddata!=''){
                bddata.map(async (val)=>{
                 console.log("получили ip", val.ipu)
                 let tmp = await curl(val.ipu);
               
                })
          }else{
           // console.log(`База пуста`)
          } 
          
        })
    //console.log("bddata")
  })
my_sql_connect.js
Код:
const mysql = require("mysql2");
const pool = mysql.createPool({
    connectionLimit: 2,    
    host: "localhost",
    user: "sui_user",
    database: "sui_bot",
    password: "Tarab@739739739"
})

pool.getConnection((error) => {
    if(error){
        return console.log("Ошибка подключения");
    }else{
        return console.log("Подключение установлено!");
    }
})
module.exports = pool
Это телеграм бот. Функция start() вызывается всякий раз, когда пользователь нажмет на кнопку в телеге. Например, добавить айпи, удалить айпи, вывести мои айпи.
А вторая часть с кроном, непрерывно каждую секунду обращается к базе, вытаскивает все айпи и проверяет приложение сервера на онлайн через курл.
Как в пуле организовать закрытие к базе. Если в start() например в /my добавлю db.close(), то закроется все соединение в том числе в кроне.
Хотелось бы после нажатия открыть соединение в /my потом зарыть только это соединение, а часть с кроном, чтобы использовало другое соединение и не знала об открытии, закрытии в других функциях.
Что, если добавить в части с кроном создать другого пользователя базы и работать с ним?
Прочел несколько статей про pool, там пишут закрыть текущее соединение командой db.release(). Но она выдает ошибку " db.releace is not a function"
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2023, 11:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от tarabukinivan
закрыть текущее соединение командой db.release(). Но она выдает ошибку " db.releace is not a function"
В коде точно release, а не releace?
Ответить с цитированием
  #3 (permalink)  
Старый 04.02.2023, 10:29
Интересующийся
Отправить личное сообщение для tarabukinivan Посмотреть профиль Найти все сообщения от tarabukinivan
 
Регистрация: 17.08.2017
Сообщений: 19

Сообщение от voraa Посмотреть сообщение
В коде точно release, а не releace?
в коде db.releace();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Действие после выполнение Ajax запроса paveltkachev jQuery 23 25.12.2014 06:33
Как правильно организовать задержку и обнуление Ajax запроса. vuler Общие вопросы Javascript 6 22.10.2014 18:56
Обновление данных на странице после отсылки POST запроса ArtemKrass Firefox/Mozilla 6 08.10.2013 18:23
Скрипт правильно работает только один раз, после начинает выдавать ошибку. xodock Events/DOM/Window 2 23.07.2012 13:04
подскажите как правильно установить mysql Геворг Серверные языки и технологии 2 13.02.2011 12:13