フレームワークとか使わずにNode.js + PostgreSQLでTodoリストをつくってみた
Node.jsでCRUD機能を有するWebアプリ作ろうと思うと、大抵Expressとか何かしらのフレームワークを使うのだろうけど、あえてフレームワークを使わずにTodoリストを作ってみました。
ソースはこちら。
今回Node.jsでTodoリストを作成するにあたって参考にしたのはNodeビギナーズブック。フレームワークを使用せずにファイルアップローダまで作るので、非常に参考になりました。おすすめ。
個人的にハマったところは、
1.srcタグによるjavascriptの読み込み
2.node-postgresのクライアント接続過多
あたり。
1.については、javascript読込用にルーティングの処理を記述してやらないと読み込むことができなくて、それに気付くまで結構時間かかりました。
具体的な記述はこんな感じ。
// router.js // パスの拡張子を確認 if('.js' === path.extname(pathname)) { // ディレクトリの構成に応じてパスを設定 var body = fs.readFileSync('..' + pathname, 'utf-8'); // HTTPレスポンスヘッダ response.writeHead(200, {'Content-Type': 'text/javascript'}); // レスポンス完了 response.end(body, 'utf-8'); }
2.の問題はどういうことかというと、なんか追加や削除、編集等、何かしらDBと通信するような処理を何回か行うと、サーバからレスポンスが返ってこないっていう事態が発生して困ったことになったっていう話。
デバッグしてたら、クライアント作ってクエリ発行したあたりで止まっているみたいで、どうやらクエリ発行するたびにクライアント生成して接続してるから接続過多になって止まっているっぽかった。
んー、当たり前といえば当たり前の話。。。
これは適宜client.end()を追加してやることで対処しました。
client.query(queryStr, function(err, result) { if(err) { console.log('query error...'); } else { // 取得データをレスポンスとして返す res.writeHead(200, {'Content-type': 'application/json'}); res.end(JSON.stringify(result.rows)); } // クライアントを切断する client.end(); });
実際やってみると色々躓くこと多くて萎えました。途中でめんどくさ!ってなって放り出したくなりました(実際、チェックなしTODOと全TODOの表示を切り替える機能つけたりとか、CSSでスタイル整えたりとか、考えてたときもあった)。
でも良いおべんきょうにはなったと、思います、多分。