Каждый раз, когда мой скрипт showData.js запускается, он вызывает

var pool  = mysql.createPool({

Есть ли способ создать пул соединений при запуске сервера node.js?

Я пытался добавить createPool в server.js, но я не могу получить доступ к объекту из моего скрипта showData.js, когда я вызываю

pool.getConnection(function(err,connection){

Обязательно ли запускать пул соединений при запуске сервера node.js?

Сохраняется ли пул соединений mysql даже после вызова connection.release и сценарий закрывается?

Редактировать @Marco, я получаю ReferenceError: пул не определен. Я знаю, что проблема в том, что я не добавляю пул в showData.js. Согласно node.js, можно загружать модуль несколько раз.

Из https://nodejs.org/api/modules.html

Кеширование

Модули кэшируются после первой загрузки. Это означает (среди прочего), что каждый вызов require ('foo') будет возвращать один и тот же объект, если он будет разрешен в один и тот же файл.

Несколько вызовов require ('foo') могут не вызывать многократное выполнение кода модуля. Это важная особенность. С его помощью можно возвращать «частично выполненные» объекты, что позволяет загружать транзитивные зависимости, даже если они вызывают циклы.

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

Вот моя последняя установка:

Lib / dbpool.js

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;

Server.js

const pool = require('./lib/dbpool');

ShowData.js

'use strict';
module.exports = router => {
    router.route('/show').post((req, res) => {
        pool.query('SELECT * FROM db.users', function(err, rows, fields) {

Нужна ли мне следующая строка в server.js и showData.js?

const pool = require('./lib/dbpool');
4
mcmacerson 28 Май 2017 в 21:29

2 ответа

Лучший ответ

Определите модуль с именем lib / dbpool.js со следующим содержимым:

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;

В коде приложения используйте:

const pool = require('./lib/dbpool');

app.post('/your/app/url', (req, res) => {
  pool.query('your query', function(err, rows, fields) {
    if (err) throw err;
    /* Manage your results here */

  });
}

Фактически выполняется pool.query: pool.getConnection (), затем connection.query (), а затем connection.release ()

10
Marco Altieri 28 Май 2017 в 19:28

Это решение использует переменную для хранения пула и возврата его после первой инициализации,

const mysql = require("mysql2/promise");
var pool;
module.exports = function getPool() {
    if (!pool) {
      const config = {
        connectionLimit: 100,
        host: process.env.SQL_HOST,
        user: process.env.SQL_USER,
        password: process.env.SQL_PASSWORD,
        database: process.env.SQL_DATABASE,
        debug:false,
        waitForConnections: true,
        multipleStatements: true
      };
      pool = mysql.createPool(config);
    }
    return pool;        
};
const getPool = require('./db.js');

async function handleREquest(req, res) {
   const result = getPool().query('...');
   //...
}

Код, основанный на этом коде Github: ЗДЕСЬ.

1
flow3r 7 Дек 2019 в 16:16