目次
1. herokuにデプロイした際の接続情報を設定
2. ローカルテスト時の接続情報を設定
3. DB接続のマネージャークラスを作成する
4. node.jsでの記述
1. herokuにデプロイした際の接続情報を設定
環境変数を管理する.envファイル追加する(アプリ作成フォルダに.envファイルを作成)
※ホスト名等はHerokuにログインしてアプリページからpostgresDBのページを開き、Database Credentialsのviewボタンをクリックして確認する
.env
ENV_HOST = [ホスト名]
ENV_DB = [DB名]
ENV_USER = [ユーザー名]
ENV_PASS = [パスワード]
dotenvモジュールをインストールする
$ npm install dotenv
アプリフォルダに新たにdbフォルダを作成し、db.jsファイルを配置する
/db/db.js
const pg = require('pg');
require('pg').defaults.ssl = true;
require('dotenv').config();
exports.pool = new pg.Pool ({
host: process.env.ENV_HOST,
database: process.env.ENV_DB,
user: process.env.ENV_USER,
port: 5432,
password: process.env.ENV_PASS,
ssl: { rejectUnauthorized: false }
});
node.jsでpostgresqlを使うためにpg(node-postgres)をインストール
$ npm install pg
2. ローカルテスト時の接続情報を設定
git bushを起動、アプリ作成フォルダにて下記コマンドを実行して接続情報をセットする
$ heroku config:set ENV_HOST=[ホスト名] --app [アプリ名]
$ heroku config:set ENV_DB=[DB名] --app [アプリ名]」
$ heroku config:set ENV_USER=[ユーザー名] --app [アプリ名]」
$ heroku config:set ENV_PASS=[パスワード] --app [アプリ名]」
3. DB接続のマネージャークラスを作成する
dbフォルダの下にpostgresManager.jsを配置する
/db/postgresManager.js
const db = require('../db/db');
/* Postgresクラス */
class PostgresManager {
/**
* Poolからclientを取得
* @return {Promise<void>}
*/
async init() {
this.client = await db.pool.connect();
}
/**
* SQLを実行
* @param query
* @param params
* @return {Promise<*>}
*/
async execute(query, params = []) {
return (await this.client.query(query, params));
}
/**
* 取得したクライアントを解放してPoolに戻す
* @return {Promise<void>}
*/
async release() {
await this.client.release(true);
}
/**
* Transaction Begin
* @return {Promise<void>}
*/
async begin() {
await this.client.query('BEGIN');
}
/**
* Transaction Commit
* @return {Promise<void>}
*/
async commit() {
await this.client.query('COMMIT');
}
/**
* Transaction Rollback
* @return {Promise<void>}
*/
async rollback() {
await this.client.query('ROLLBACK');
}
}
/**
* Postgresのインスタンスを返却
* @return {Promise<Postgres>}
*/
const getClient = async () => {
const postgres = new PostgresManager();
await postgres.init();
return postgres;
};
module.exports.getPostgresClient = getClient;
4. node.jsでの記述
記述サンプル
const { getPostgresClient } = require('../db/postgresManager');
/* 検索処理 */
async function select_list(params) {
var result;
const dbm = await getPostgresClient();
const sql = 'SELECT * FROM TEST';
try {
result = await dbm.execute(sql, params);
} catch (e) {
console.log('err:'+e.stack);
} finally {
console.log('success');
}
}