はじめに
typescript+node.jsでpostgresqlに接続するにはpgを使用します
インストール方法
npmでインストールします
npm install pg --save
typescriptを使用するので型定義もインストールします
npm install @types/pg --save-dev
使い方
データベースへの接続
import { Client } from 'pg';
const client = new Client({
host: '[データベースのホスト]',
database: '[データベース名]',
user: '[ユーザーID]',
password: '[パスワード]'
});
client.connect();
connect()はPromiseを返しますので、awaitを使って下記のようにできます
await client.connect();
一連の処理を一つの関数にすると下記のようになります
const pgConnect = async () => {
const client = new Client({
host: '[データベースのホスト]',
database: '[データベース名]',
user: '[ユーザーID]',
password: '[パスワード]'
});
await client.connect();
return client;
}
クエリの実行
const result = await client.query('SELECT * FROM "[テーブル名]"');
for (const row of result.rows) {
console.log(row['カラム名']);
}
query()でクエリを実行します
この関数もPromiseを返します
クエリの実行結果のrowsにデータが格納されており、カラム名で値を取得することができます
パラメータを使用するには、第二引数に配列で指定します
const result = await client.query('SELECT * FROM "[テーブル名]" WHERE ID = $1', [1]);
終了
await client.end();
クラス例
以上の関数を実装したクラス例です
import {Client} from 'pg';
export class Postgres{
private client: Client;
/**
* 接続
* @param {string} host
* @param {string} user
* @param {string} password
* @param {string} database
* @returns {Promise}
*/
public async connect(host: string, user: string, password: string, database: string){
this.client = new Client({
host: host,
user: user,
password: password,
database: database
});
await this.client.connect();
}
/**
* クエリ実行
* @param {string} query
* @param {any[]} parameters
* @returns {Promise}
*/
public async query(query: string, parameters: any[] = []){
return (await this.client.query(query, parameters)).rows;
}
/**
* 終了
* @returns {Promise}
*/
public async end(){
await this.client.end();
}
}