Edited at

【Node.js+Express+PostgreSQL】ExpressにPostgreSQLを導入


背景

DBに接続するWebアプリケーション開発をしたい。

使い慣れているExpressと、最終的にHerokuで公開することを考慮してPostgreSQLを使いたい。

なお、自分用のメモみたいな感じで書いているので、その点はご了承いただきたい。


環境


  • Windows 10

  • Express 4.16.0

  • PostgreSQL 11.3

  • pg 7.11.0


PostgreSQLのインストール

「PostgreSQL インストール」でググると、方法が出てくるのでそれらを参考にしてください。


サンプル用のデータベース用意



  1. mydbというデータベースを作成。


command

psql -U postgres mydb

パスワード:

パスワードは、PostgreSQLインストール時に指定したものを入力。

入力時、何も入力されていないように見えるが、正しいパスワードを入力してEnterキーを押せば、データベースに接続できる。

-

2. staffテーブルの作成。


command

CREATE TABLE Staff (

id CHAR(4) NOT NULL,
name TEXT NOT NULL,
age INTEGER ,
PRIMARY KEY (id));

-

3. staffテーブルに適当にレコード作成


command

INSERT INTO staff VALUES (1, 'taro', 21), (2, 'Jiro', 20), (3, 'Saburo', 18);


-

4. レコードが作成できたか一応確認


command

SELECT * FROM staff



アプリケーションの作成


  1. 適当に名前をつけてExpressアプリケーションを作成。


command

express -e practice_postgres

cd practice_postgres
npm install

-

2. 今回必要なモジュールnode-postgresのインストール。


command

$ npm install pg --save


-

3. クライアント側の記述


index.ejs

<!DOCTYPE html>

<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<p><%= datas %></p>
</body>
</html>

-

4. サーバ側の記述


index.js

var express = require('express');

var router = express.Router();
var pg = require('pg');

router.get('/', function(req, res, next) {
var pool = pg.Pool({
database: 'mydb',
user: 'postgres', //ユーザー名はデフォルト以外を利用している人は適宜変更してください。
password: 'PASSWORD', //PASSWORDにはPostgreSQLをインストールした際に設定したパスワードを記述。
host: 'localhost',
port: 5432,
});
pool.connect( function(err, client) {
if (err) {
console.log(err);
} else {
client.query('SELECT name FROM staff', function (err, result) {
res.render('index', {
title: 'Express',
datas: result.rows[0].name,
});
console.log(result); //コンソール上での確認用なため、この1文は必須ではない。
});
}
});
});

module.exports = router;


ここでは、わかりやすくするために、datas: result.rows[0].name,の部分で{id: 1, name: 'taro', age: 21}からTaroを取得してクライアントで表示するようにしている。

-

5. 実行結果確認

上記のコードを記述したら、表示確認。


command

npm start


20190611a.PNG

上記のように表示されていれば成功。


あとがき

PostgreSQLに関する知識がない状態から、メモ代わりに本記事を書いた。

とりあえず、ExpressからPostgreSQLに接続する必要最低限のことはできたので、今後はHeroku Postgresを使ってHeroku上でアプリケーションを公開する方法などを模索していく。

ご指摘などあれば、コメントによろしくお願いします。


追記

Heroku Postgresに接続する際は、Heroku Postgresにテーブルとレコードを作成した後、以下のコードのdatabaseなどの情報をHeroku上に載っているもの(※)に書き換える。

※herokuのアプリ>Resources>Heroku Postgres>Settings、から閲覧可能。


index.js

var pool = pg.Pool({

database: 'mydb',
user: 'postgres', //ユーザー名はデフォルト以外を利用している人は適宜変更してください。
password: 'PASSWORD', //PASSWORDにはPostgreSQLをインストールした際に設定したパスワードを記述。
host: 'localhost',
port: 5432,
});

また、host: localhostのままだと、エラー吐かれる。


参考文献