У меня на сервере запущено приложение node.js (а не docker). Я хочу, чтобы он подключился к mariadb docker, работающему на том же сервере. Я настраиваю mariadb docker с помощью следующей команды:
docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a -e MYSQL_ROOT_HOST=% -d mariadb:latest
С nodejs Я пытаюсь подключиться к базе данных через соединения, которые я получаю от Pool.getConnection (). Созданные пулы базы данных хранятся в отдельной базе данных. js.
Я уменьшил проблему до следующего кода:
Моя база данных. js:
const mariadb = require('mariadb');
const pool = {
'poolRobots': mariadb.createPool({
database: 'certmanager',
host: '127.0.0.1',
port: '3306',
user: 'root',
password: 'a',
connectionLimit: 20
}),
'poolNormal': mariadb.createPool({
database: 'certmanager',
host: '127.0.0.1',
port: '3306',
user: 'root',
password: 'a',
connectionLimit: 40
}),
};
Мой индекс. js:
const db = require('./database');
async function someFunction(){
let conn;
try {
conn = await db.poolNormal.getConnection();
const query = await conn.query('SELECT * FROM visited_pages',[]);
console.log('query was successfull');
} catch(e) {
console.error(e);
}
}
setTimeout(async ()=>{
const main = await someFunction();
},50);
Мой вывод:
TypeError: Cannot read property 'getConnection' of undefined
at someFunction (/home/ubuntu/CertManager/crawler/index.js:7:44)
at Timeout.setTimeout [as _onTimeout] (/home/ubuntu/CertManager/crawler/index.js:16:21)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)
Что меня смущает, так это то, что я все еще могу подключаться к БД с помощью клиента mariadb из моего сервер через:
mariadb --host 127.0.0.1 -u root -D certmanager -p
Так или иначе это возможно с моего сервера через клиента, но не через nodejs. Как я могу это исправить?