[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
所用で必要だったのでメモメモ。
const MYSQL = require('mysql'); // 事前に npm install しておく const TUNNEL = require('tunnel-ssh'); // 事前に npm install しておく const FS = require('fs'); // 経由するサーバに SSH するための情報。無論適宜変える事 const sshParam = { username: 'hiyoko', host: '192.168.22.17', port: 22, privateKey: FS.readFileSync('hiyoko-server.pem'), dstPort: 3306, localhost: 'localhost', localPort: 3306 }; // mysql サーバに接続するための情報。無論適宜変える事 const mysqlParam = { host: 'mysql.hiyoko.example.com', user: 'mysql-user', password: 'myStrongestPassword', database: 'hiyoko' // 特定の DB に入りたいわけでないのであれば書かない }; const connectToDb = (connection) => { return new Promise((resolve, reject)=> { connection.connect((dbConnectErr)=>{ if(dbConnectErr) { console.error('DB への接続に失敗したよ'); reject(dbConnectErr); } else { console.log(`DB に接続できたよ スレッド ID は ${connection.threadId}`); resolve(connection); } }); }); }; const disconnectFromDb = (connection) => { return new Promise((resolve, reject)=> { connection.end((dbDisconnectErr)=> { if(dbDisconnectErr) { console.error('DB との切断に失敗したよ'); reject(dbDisconnectErr); } else { console.log('DB と切断したよ'); resolve(connection); } }); }); }; const requestQuery = (connection, sql) => { return new Promise((resolve, reject)=> { connection.query(sql, (requestErr, results, fields)=> { if(requestErr) { console.error(`DB へのリクエスト ${sql} が失敗したよ`); reject(requestErr); } else { resolve({ results: results, fields: fields }); } }); }); }; const sshTunnel = TUNNEL(sshParam, async (sshErr, tunnel)=> { if(sshErr) { throw sshErr; } const connection = MYSQL.createConnection(mysqlParam); await connectToDb(connection); /* 以下で DB の処理とかをがちゃがちゃ */ const queryResult = await requestQuery(connection, 'select * from aTable;'); console.log(queryResult); /* 終わったら切断する */ await disconnectFromDb(connection); sshTunnel.close(); });
ただいまコメントを受けつけておりません。