sidorares / node-mysql2

:zap: fast mysqljs/mysql compatible mysql driver for node.js
https://sidorares.github.io/node-mysql2/
MIT License
4.06k stars 616 forks source link

How we should create pool for using async/await. #1057

Open afwn90cj93201nixr2e1re opened 4 years ago

afwn90cj93201nixr2e1re commented 4 years ago

Comment

afwn90cj93201nixr2e1re commented 4 years ago
const mysql2 = require('mysql2/promise');

const pool = mysql2.createPool({
    host:'localhost', user: '', database: '',
    password:'',charset:'',timezone:'',
    dateStrings: true
});

const promisePool = pool.promise();
export default {pool, promisePool}
const mysql2 = require('mysql2/promise');

const pool = mysql2.createPool({
    host:'localhost', user: '', database: '',
    password:'',charset:'',timezone:'',
    dateStrings: true
});

const promisePool = pool;
export default {pool, promisePool}
const mysql2 = require('mysql2');

const pool = mysql2.createPool({
    host:'localhost', user: '', database: '',
    password:'',charset:'',timezone:'',
    dateStrings: true
});

const promisePool = pool.promise();
export default {pool, promisePool}

Which one is better? So, what's exactly pool.promise() doing? ( > MySQL2 also exposes a .promise() function on Pools, so you can create a promise/non-promise connections from the same pool ) What's difference between pool.promise and requiring mysql2/promise?

afwn90cj93201nixr2e1re commented 4 years ago

So, there no difference? Or what? https://github.com/sidorares/node-mysql2/blob/c955041b0785bb7b7cc5536982fab0a418e70a88/test/unit/test-Pool.js#L28 изображение https://github.com/sidorares/node-mysql2/blob/0c422dd9d88a211015ddf4fcc8531048de9b1340/lib/pool_connection.js#L30, https://github.com/sidorares/node-mysql2/blob/570d2a0f29276777cf0fd892bb46ecf9c03628b6/lib/pool.js#L33

What is diff between PromisePool and PromisePoolConnection? What does promiseImpl mean?

изображение

afwn90cj93201nixr2e1re commented 4 years ago

В общем опишу как я понял, судя по исходникам: PromisePoolConnection(по сути он не нужен в общих случаях, кроме случаев где мы используем конструкции в приведенном ниже снипе, верно**?**) - класс прослойка для пула, просто получает обычное соединение и кладет его в пул, дальше при execute и прочих встроенных в пул методах вызывает его https://github.com/sidorares/node-mysql2/blob/108f17880afaa4bc0b34482314c6d04879ca6e39/promise.js#L322 https://github.com/sidorares/node-mysql2/blob/570d2a0f29276777cf0fd892bb46ecf9c03628b6/lib/pool.js#L6 https://github.com/sidorares/node-mysql2/blob/570d2a0f29276777cf0fd892bb46ecf9c03628b6/lib/pool.js#L161 https://github.com/sidorares/node-mysql2/blob/570d2a0f29276777cf0fd892bb46ecf9c03628b6/lib/pool.js#L138 https://github.com/sidorares/node-mysql2/blob/570d2a0f29276777cf0fd892bb46ecf9c03628b6/lib/pool.js#L50

let conn = await db.promisePool.getConnection();
await conn.execute(,[]);
await conn.execute(,[]);
conn.unprepare(query);
conn.release();