前回、Windows上にNode.jsの環境を構築して、Hello,Worldを出力されるところまでおこないました。
今回は、Node.jsとPostgreSQLを接続して、データベースに格納されているデータをブラウザ上に表示させるところまでおこないたいと思います。
やっぱり、データベースに接続してデータを表示するというところまでは、お勉強としておさえておきたいところです。
環境情報
- OS:Windows10
- Webサーバ:Node.js 12.16.3
- DB:PostgreSQL9.6
PostgreSQLとは
PostgreSQL(ぽすとぐれすきゅーえる)は、オープンソースのデータベースになります。
よく、「ぽすぐれ」と言われています。
PostgreSQLはオープンソースなので、気軽に使えるのが良いところです。
かつ、標準SQL にならった実装になっていますので、標準SQLでほぼ全てのクエリを実行することができます。
この記事では、PostgreSQLのダウンロードと環境構築の紹介は省略します。
node-postgres
Node.jsでPostgreSQLと接続をおこなうためには、「node-postgres」を使用する必要があります。
「node-postgres」は、npmでインストールをおこなうことができます。
任意のフォルダを作成して、そのフォルダで以下のコマンドを実行します。
npm install --save pg
インストールが完了すると、インストールしたフォルダに「node_modules」が作成され、インストールが完了します。
このフォルダにプログラムを作成していきます。
PostgreSQLに接続してデータ表示
実際にNode.jsのプログラムを作成して動かしてみます。
データベースにはあらかじめて、以下のデータを格納しておきます。
person_id |
name |
kana |
gender |
1 |
山田太郎 |
やまだたろう |
1 |
2 |
山田次郎 |
やまだじろう |
1 |
3 |
山田三郎 |
やまださぶろう |
2 |
上記のデータをクエリで取得し、ブラウザ上に表示するプログラムを作成します。
プログラムとしては以下になります。
// モジュールを準備 var http = require('http') var {Client} = require('pg'); http.createServer(function (req, res) { // PostgreSQLに接続 var client = new Client({ user: 'postgres', host: 'localhost', database: 'nodeJsDB', password: 'postgres', port: 5432 }) client.connect() // HTTPレスポンスヘッダを出力 res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'}) // クエリを実行してTABLEタグで出力 var query = client.query( "select person_id, name, kana, gender from persons;", function(err, result) { res.write('<html><head></head><body><table>'); for(lc = 0; lc < result.rows.length; lc++){ res.write('<tr>'); res.write("<td>"+result.rows[lc].person_id+"</td>" ); res.write("<td>"+result.rows[lc].name+"</td>" ); res.write("<td>"+result.rows[lc].kana+"</td>" ); res.write("<td>"+result.rows[lc].gender+"</td>" ); res.write('</tr>'); } res.end('</table></body></html>') }); }).listen(8989)
プログラムとしては簡単です。
PostgreSQLに接続してクエリを実行し、実行結果をTABLEタグに出力するのみです。
nodeコマンドでNode.jsのサーバを起動します。
node pgConnect.js
URLにアクセスすると実行結果が表示されます。
http://localhost:8989/pgConnect
まとめ
いかがでしょうか?
PostgreSQLであっても、Node.jsから簡単に接続がおこなうことができました。
本当はMongoDBとか使ってみたいんですが、しばらくはPostgreSQLでNode.jsの勉強を進めようと思います。