3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TypeScriptでDocker上に構築したPostgreSQLに接続

Posted at

はじめに

DB からのデータ取得などの動作を含む簡単な Web アプリを試したい。PoC レベルでバックエンド側の API 作成まで行うのは時間がかかりすぎるため、本記事では TypeScript から PostgreSQL に接続し、データ取得を行う。また PostgreSQL 環境自体も容易に作成・破棄できるよう Docker コンテナ上に構築している。詳細は Dockerコンテナ上のPostgreSQLにデータベースを作成を参照。実行環境は以下。

  • Windows 10 Pro (WSL2: Ubuntu-20.04)
  • pg 6.14.15
  • @types/pg 6.14.15

公式ドキュメントを参考にした。

ライブラリのインストール

まず PostgreSQL に接続するためのライブラリ pg をインストールする。今回は TypeScript で扱いたいので、合わせて型定義 @types/pg もインストールしておく。

$ npm install pg
$ npm install @types/pg

DB 接続プログラム

続いて、pg を用いて DB に接続する。公式ドキュメントを参考に作成したプログラムは以下。Client 内の設定は Dockerコンテナ上のPostgreSQLにデータベースを作成と同様のものとしている。

dbOpe.ts
const { Client } = require('pg');

const client = new Client({
  user: 'postgres',
  password: 'postgres',
  host: '[host address]',   // 詳細は後述
  database: 'test_db',
  port: 5432
});

client.connect();
console.log('connected')

client
  .query('select now()')
  .then((res: any) => console.log(res.rows))
  .catch((err: any) => console.error('connection error', err.stack))
  .then(() => client.end())
  .then(() => console.log('disconnected'));

ここで host は Docker コンテナにアクセスすることで確認できる。

$ docker exec -it [container id] /bin/bash
root:/# hostname -i

たとえばこの際に 172.17.0.2 が得られたとする。しかし、このアドレスをそのまま指定しても接続することはできなかった。詳細は理解できていないが、172.17.0.1 のように同じネットワークアドレスかつホストアドレスが 1 のアドレスを指定するとアクセスできた。デフォルトゲートウェイ(?)が原因のようだが、わかっていないので詳しい方がいたらぜひ教えて下さい。

上記 ts ファイルをトランスパイルして、実行すると以下のような出力が得られる。

$ tsc dbOpe.ts && node dbOpe.js
connected
[ { now: 2021-09-10T05:03:25.955Z } ]
disconnected

DB にアクセスし、データ取得できたことが確認できる。

おわりに

pg ライブラリを使用して、DB に接続した。API なしでフロントエンドから直接 DB を参照できるかと考えたが、こちらによると pg は Node.js でしか実行できないようだ。PoC レベルでもフロントエンドと DB を接続するには Web API を作成するしかないか。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?