2016-09-28 1 views
1

背景情報node.js/express application - データベース接続ロジックはどこに置かれますか?

初めての急なアプリケーションを作成しました。私はそれがファイルとデフォルトのフォルダ構造の束を作成したことがわかります。

[email protected]:/var/www/html/nodejs_samples/tutorial1$ ls -lah 
total 36K 
drwxr-xr-x 7 me me 4.0K Sep 28 09:26 . 
drwxrwxr-x 5 me me 4.0K Sep 28 08:45 .. 
-rw-rw-r-- 1 me me 1.5K Sep 28 08:45 app.js 
drwxr-xr-x 2 me me 4.0K Sep 28 09:20 bin 
drwxrwxr-x 96 me me 4.0K Sep 28 09:26 node_modules 
-rw-rw-r-- 1 me me 352 Sep 28 09:26 package.json 
drwxr-xr-x 5 me me 4.0K Sep 28 08:45 public 
drwxr-xr-x 2 me me 4.0K Sep 28 09:26 routes 
drwxr-xr-x 2 me me 4.0K Sep 28 08:45 views 
[email protected]:/var/www/html/nodejs_samples/tutorial1$ 

ゴール

私は「ウィジェット」と呼ばれる新しいルートを作成したいとGETメソッドが呼び出されたときに、私はRedisのデータベースを呼び出す必要があります:これは私のアプリの構造は、現在のように見えるものですクエリを実行します。

http://myserver/tutorial1/widgets/ 

または

http://myserver/tutorial1/widgets/12345 

12345は私が照会したいウィジェットのキーです:私はこの取得をトリガーするために使用したい URLは次のようなものです。私はこれまで

をやった

私はRedisのデータベースを照会/接続する方法を説明し、このドキュメントを見つけました:http://expressjs.com/en/guide/database-integration.html#redis

私も発現していることルート/ users.jsをコピーしましたジェネレータは、私が経路/ widgets.jsを出発点として「無料で」作成しました。私は、データベース接続のロジックとクエリロジックを追加する必要がどこそれは私にははっきりしていない

[email protected]:/var/www/html/nodejs_samples/tutorial1$ cat routes/widgets.js 
var express = require('express'); 
var router = express.Router(); 

/* GET widgets listing. */ 
router.get('/', function(req, res, next) { 
    res.send('respond with a resource'); 
}); 

module.exports = router; 

質問

これは、ように見えるファイルwidgets.js何私のルート/です。私はすべてのデータベースロジックをモデルに分割するMVCに慣れています。

すべてをroute/widgets.jsファイルに入れることはできますか?

場合によっては、私のapp.jsファイルの外観は次のとおりです:http://pastebin.com/hAe5mvwt。私は2行10行目と28行目を追加しました。

良いチュートリアルへの提案やリンクがあれば幸いです。

+0

あなたは*可能ですが、ルートハンドラに直接結合されています。そのように始めるのはいいですが、私は懸念をより強く分けることを好みます。最終的には、これは意見に変わります。機能を分断するための具体的な「正しい」方法はありません。 –

答えて

0

答えは「はい」です.MVCはうまく機能し、データベースの内容は確かにモデルに入ります。

しかし、猫の皮膚にはたくさんの方法があります。現時点ではなかなか面白いことではなく、あなたにとって便利なことをやるべきだと思うし、合理的にきれいなデザインのように感じる。

システムが複雑になるにつれて、スムーズに発展させる方法が必要です。あなたは、あなたが行くにつれて現実が変わるので、決して最終的な「最良の」デザインを持つことは決してありません。

すでに実装されている多くの(そして非常に多様な)パワフルなデザインを探索するには、まずnode-modules.com、npmjs.com、npms.ioを調べてください。

時間がある場合は、コードを整理するための複数の戦略が必要です。

さらに大きな問題は、アプリケーションを完全に壊すことなく(そして知らないうちに)、このデザインを道路の下でどのように変更することができますか(

コード体系をあまりにも苦労させるのではなく、可能な限り自動的にテストする方法を考案することに努めます。そのようにしてデザインを変更すると、何が壊れているかを見ることができます。したがって、デザインを変更することは可能です。

実用的な場合は単体テスト、それ以外の場合は統合テスト、より大文字のエンドツーエンドテストが必要です。

モジュール/モデルファイル/何かに何かを置き、ユニットとして個別にテストすることができれば、おそらく他の設計よりも優れています。

+0

私はあなたの提案が大好きです。テスト可能な単位にコードを分けることは、私が心に留めておくべき良い全体原則です。私は何をするだろうと思うのは、特定のルートファイルにすべてを置くことから始まります。ノードとエクスプレスを学ぶだけです。そして、一度私はそれに精通しています...おそらくテストの帽子を置いて、私のサンプルを再訪しますどのようなリファクタリングがテストをサポートするのかを確認するコードです。 – Happydevdays

関連する問題