背景
DBに接続するWebアプリケーション開発をしたい。
使い慣れているExpressと、最終的にHerokuで公開することを考慮してPostgreSQLを使いたい。
なお、自分用のメモみたいな感じで書いているので、その点はご了承いただきたい。
環境
- Windows 10
- Express 4.16.0
- PostgreSQL 11.3
- pg 7.11.0
PostgreSQLのインストール
「PostgreSQL インストール」でググると、方法が出てくるのでそれらを参考にしてください。
サンプル用のデータベース用意
-
mydb
というデータベースを作成。
psql -U postgres mydb
パスワード:
パスワードは、PostgreSQLインストール時に指定したものを入力。
入力時、何も入力されていないように見えるが、正しいパスワードを入力してEnterキーを押せば、データベースに接続できる。
-
staff
テーブルの作成。
CREATE TABLE Staff (
id CHAR(4) NOT NULL,
name TEXT NOT NULL,
age INTEGER ,
PRIMARY KEY (id));
-
staff
テーブルに適当にレコード作成
INSERT INTO staff VALUES (1, 'taro', 21), (2, 'Jiro', 20), (3, 'Saburo', 18);
- レコードが作成できたか一応確認
SELECT * FROM staff;
アプリケーションの作成
- 適当に名前をつけてExpressアプリケーションを作成。
express -e practice_postgres
cd practice_postgres
npm install
- 今回必要なモジュール
node-postgres
のインストール。
npm install pg --save
- クライアント側の記述
<!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>
- サーバ側の記述
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
を取得してクライアントで表示するようにしている。
- 実行結果確認
上記のコードを記述したら、表示確認。
npm start
あとがき
PostgreSQLに関する知識がない状態から、メモ代わりに本記事を書いた。
とりあえず、ExpressからPostgreSQLに接続する必要最低限のことはできたので、今後はHeroku Postgresを使ってHeroku上でアプリケーションを公開する方法などを模索していく。
ご指摘などあれば、コメントによろしくお願いします。
追記
Heroku Postgresに接続する際は、Heroku Postgresにテーブルとレコードを作成した後、以下のコードのdatabase
などの情報をHeroku上に載っているもの(※)に書き換える。
※herokuのアプリ>Resources>Heroku Postgres>Settings、から閲覧可能。
var pool = pg.Pool({
database: 'mydb',
user: 'postgres', //ユーザー名はデフォルト以外を利用している人は適宜変更してください。
password: 'PASSWORD', //PASSWORDにはPostgreSQLをインストールした際に設定したパスワードを記述。
host: 'localhost',
port: 5432,
});
また、host: localhost
のままだと、エラー吐かれる。
追記2
Heroku Postgresへの接続は、こちらの記事で詳しくまとめた。
追記3
async/await
使うパターンは、こちらの記事でまとめた。
追記4
SQLのトランザクションを考慮したコードを、こちらの記事でまとめた。
この記事のコードは汎用性の高いもの、などと勝手に思っている。
参考文献
-
https://www.postgresql.jp/document/11/html/
- PostgreSQLの使い方(公式だけど、わかりにくい)
-
https://qiita.com/aoi_erimiya/items/a37890fb4719357f7f87
- PostgreSQLの使い方(こちらのほうが参考になる)
-
https://qiita.com/Shitimi_613/items/bcd6a7f4134e6a8f0621
- PostgreSQLのコマンド一覧
-
https://node-postgres.com/features/connecting
- node-postgresモジュール
-
http://hiyo-ac.hatenablog.com/entry/2018/01/28/141831
- Node.jsでDBに接続するアプリのサンプルコード載っている(参考になる!)