Node.js + node-postgresでWebアプリケーション(2)

うーむ、やっぱりきちんと勉強しないまま組んではいけないのだろうなあ。

とりあえず、PostgreSQLに接続して、SELECTを発行して結果をブラウザ上にTABLE形式で表示するというものからやってみることにした。

対象にするテーブルはこんな感じ。

CREATE TABLE p_user
(
u_id integer NOT NULL,
u_uname text, -- ログイン用のアカウント名
u_fullname text, -- アプリケーションで表示する名前。
u_icon text, -- アイコンのURL
passwd text, -- パスワード。...
CONSTRAINT pk_u_uid PRIMARY KEY (u_id )
)
このテーブルにテキトーにデータを入れておく(今回は3レコード分挿入しておいた)
で、このテーブルに対して以下のような簡単なSELECT文を投げる。
SELECT u_id, u_uname, u_fullname FROM p_user
で、全レコード文結果を取得しつつ、TR,TDタグを表示するという非常に簡単なもの。
コードはこんな感じ。
var http = require('http');
var pg = require('pg'); //native libpq bindings = `var pg = require('pg').native`
var conString = "tcp://postgres:postgres@localhost:5432/party";

http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('<HTML>');
response.write('<BODY>');
response.write('<TABLE BORDER="1">');
response.write('<TR><TH>u_id</TH><TH>u_uname</TH><TH>u_fullname</TH></TR>')

var client = new pg.Client(conString);
client.connect();

var query = client.query("SELECT u_id, u_uname, u_fullname FROM p_user");

query.on('row', function(row) {
console.log("query on : start");
response.write('<TR>');
response.write("<TD>" + row.u_id + "</TD>" );
response.write("<TD>" + row.u_uname + "</TD>" );
response.write("<TD>" + row.u_fullname + "</TD>" );
response.write('</TR>');
});

query.on('end', function() {
response.write('</TABLE>');
response.end('</BODY>');
response.end('</HTML>');
client.end();
});
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

このスクリプトをfoo.jsとかで保存。
そして
 $ node foo.js
で実行する。この状態でブラウザを起動して"http://127.0.0.1:8124/"を指定すると、こんな感じの画面が表示される。

ちょっと詰まったのは、response.write()の使いかたが間違っていたこと。てっきり、console.log()みたいな書式指定が使えるのだと思っていたよ・・・どっちかというとJavaのSystem.out.println()とかに近い使いかたなのか。
あとは久々にHTML書いたから、そもそもHTMLタグを書き忘れているとか、初歩的なミスが・・・駄目だ俺。
もう一つはendのイベントを受け取ったあとにTABLE終了タグやら、各種終了タグを書かないとうまく表示されないってのに詰まった。理屈がわかればどうということもないのだろうが・・・

さて、これで表示は出来たんだけど、まだ画面遷移方法やGET/POSTの使いかたが良くわからない。あまりサンプルもないんだよなあ。まあ、普通に作るならexpressとかいうフレームワーク使え!って話なんだろうし、そもそもNodeでCGIとかあまりよろしくない作法なんだろうなあ。サンプルがないのもそれ故かも。
せめて、「フォーム入力→認証チェック→認証OK画面」くらいまではなんとか今日中に作りたいけど、自信がなくなってきた。