Node.jsとExpressとPostgreSQLをつかって、WEBアプリを開発したいと思っています。そこで、開発にあたって、参考になりそうなサンプルソースをさがしております。
Rails+PostgreSQLの組み合わせだと情報はたくさんあるのですが、Node.jsとなると極端に情報量が少ないような印象を受けています。参考になる情報を教えていただけませんでしょうか。
WBアプリはある程度、本格的なものを作る予定をしております。学習教材でよくありがちな、ちょっとしたToDoアプリを作りましょう的なサンプルコードでは参考にならないと思っております。学習教材よりも少し本格的なサンプルコードを探しております。そのような情報をご存じの方、教えていただけませんでしょうか。よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
Rails+PostgreSQLの組み合わせだと情報はたくさんある
Railsは非常に多くのブラックボックスを抱えたプロジェクトだからです。
それにより必要最小限のコードで(それなりにまともに動くデフォルト値が補われて)動作します。
高速にWebサービスをリリースできるのはRailsの強みですが、
知っているべき前提が多く、その知識なしではお話にならないって所に起因していると私は分析しています。
学習教材よりも少し本格的なサンプルコードを探しております。
ぶっちゃけ無いと言うのが実情です。
Node,jsの文化がUnix哲学の「一つのことをうまくやるプログラムを書け」みたいなもんで、
必要最低限のモジュールだけを必要に応じてこしらえて動かす事が前提となっています。
なのでNode.jsの基礎の部分の学習と、
各種モジュールの公式サイトを読んで情報を引き出せる能力が極めて重要となります。
そしてそれらをすぐに試せるREPLもついています。
Expressは機能が多くないので、コード読めばやってることは全て書いてありますしドキュメントも神です。
日本語ドキュメントの上メニューにある「解説」「ガイド」「高度なトピック」「リソース」全てが神です。
Webに必要な要素はほぼ網羅されており、困ったら日本語ドキュメントに泣きつけば大抵書いてあります。
逆にそこいらの雑魚が書いたメンテされてない記事やサンプルコードなど不要です。
postgresqlはpgというモジュールの手厚いドキュメントを見つけました。
コネクションプールの張り方、Node.js世界での値の残し方を覚えれば後は消化試合みたいなもんですね。
これは調べてもすぐには出てこないので後述します。
後はNode.js力だけですね。
ここに関しては良い書籍を買うなり時間かけるしかないです。
さて、Node.js上でRDBMSを使う上で必要になる
シングルトンに関して解説して締めます。
Node.jsでrequireした場合、
require先のJavaScriptファイルを一度上から下まで全て実行してしまい、
最終的にmodule.exports
変数に代入された値をキャッシュとしてもたせる動きになります。
なのでconnectingを読みつつ
コネクション張った瞬間をキャッシュにしてもたせましょう。
(本番環境の事を考えると記事内にある環境変数を使った手法にした方が良いでしょう)
js
1// src/modules/connection.js 2const {Pool} = require("pg"); 3 4module.exports = process.env.PGHOST 5 ? new Pool({ 6 user: 'dbuser', 7 host: 'database.server.com', 8 database: 'mydb', 9 password: 'secretpassword', 10 port: 3211, 11 }) 12 : new Pool();
使う側はこんな感じ
2箇所以上でrequireしてもnew Pool()
で生成された後の値をキャッシュとして返すだけなので
様々なファイルが呼び出しても不必要なコネクションを張りに行くことはありません。
こちらもQueriesというサンプルがあるのでそこから採用します。
js
1// src/models/user.js 2 3// .で始まるとこのファイルのパスを起点としたJavaScriptファイルの指定になる 4const conn = require("../modules/connection.js"); 5 6module.exports = { 7 findById: async (id) => { 8 const res = await conn.query("SELECT * FROM users WHERE id = $1", [id]); 9 return res.rows[0]; 10 }, 11};
Express使う側はこんな感じ
ガイド -> ルーティングを読みつつ書きました。
js
1// app.js 2const express = require("express"); 3 4// 欲しいと思ったファイルの先頭で呼び出す 5const User = require("./src/models/user.js"); 6 7const app = express(); 8 9app.get("users/:id", (req, res) => { 10 const user = await User.findById(req.params.id); 11 res.json(user); 12}); 13 14app.port(3000);
ExpressJSでのテンプレートを何をどうやって使うか、ファイル分割テクニック等は
個別に調べれば出てくるので規模に合わせて調査してみてください。
投稿2022/06/22 08:22
総合スコア21158
0
ベストアンサー
何をしたいかによって、お勧めするサンプルは変わってくると思います。
単純にnodeでPostgreSQLを利用したサンプルが欲しいというのであれば、下記サイトを見つけました。
PostgreSQLのセットアップから、nodeからの接続までを行っています。
https://www.dailyupblog.com/backend_development/962/
また、Expressはシンプルなフレームワークなので、Expressのマニュアルに記載されているサンプルもわかりやすいかと思います。
https://expressjs.com/ja/guide/routing.html
「本格的」という文言がありますが、基本的にはどのアプリも学習教材の「ToDo」アプリのようなものの考え方を応用したりといったものがほとんどなので、学習教材的なサンプルに手を付けるのが一番いいかと思います。
投稿2022/06/22 07:32
編集2022/06/22 07:37総合スコア1005
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/22 08:17 編集
2022/06/27 02:03
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/27 02:13