2016-12-09 3 views
0

私の代理店の同僚がNode.jsをピックアップしただけで、1つの機能を1つの機能にまとめれば複数のファイルを持つよりも優れています。例:複数のアップデートに1台のルータを使用して各モデルのコントローラをファイルに分割する

app.post('api/v1/:model/create', (req, res, next) { 
    let modelName = req.params['model']; 

    SCHEMAS[modelName].create(req.body, (err, model) => {}); 
}); 

だから、すべてのPOSTリクエストは、それが(マングース経由)のMongoDBにオブジェクトを格納し、この一つの機能に入ります。 delete、put、getの場合も同様です。

は私が通常行うことである。

/models/website/page.js

app.post('/api/v1/pages/', (req, res, next) => {/* Store object to database here */}); 
app.delete('/api/v1/pages/:pageId', (req, res, next) => {/* Delete object from database here */}); 

/models/website/navigation.js

app.post('/api/v1/navigation/', (req, res, next) => {/* Store object to database here */}); 
app.delete('/api/v1/navigation/:navigationId', (req, res, next) => {/* Deletes object from database here */}); 

などなどなど、あなたのアイデアを得ます。また、それぞれのファイルは、私のメソッドで、対応するモデルのコントローラを取得、ポスト、プット、および削除しています。

あなたは私にこの練習を教えてもらえますか?どちらがより良いアプローチですか?

答えて

0

少し変更してアプローチしていますが、名前空間のルートごとに別々のファイルを使用しています。これらのファイルでは、すべてのルートをすべて呼び出します。そうです。

server.js

app.use('/api/v1/navigation/', require(./api/path/to/file/navigationRoutes')); 

navigationRoutes.js

var router = require('express').Router(); 
router.get('/', function(req, res, next){/* get request to the root of the namespace route, api/v1/navigation */}); 
router.post('/:navigationId', function(req, res, next){/* post request to api/v1/navigation/:navigationId */}); 

module.exports = router; 

は、だから私は、別のファイル内のすべてのルートの呼び出しを持つことの利点を取る、それは孤立した経路の特定を行うのは簡単です作業を行い、ルートを拡張します。

+1

は、私は簡単にするために私の例ではそれを残しました。私は各URLセグメントのコントローラのグループが必要です。したがって、 '/ api、require( 'apiRoutes')'、 'apiRoutes'、'/v1、require( 'v1Routes')などのようになります。 – borislemke

0

私はあなたのやり方で働いています。
いくつかのモデルでは、同じものにする前に、いくつかの追加作業が必要です(検証、w/e値の追加)。
これもセキュリティの一部です。

新しいユーザーを「POST」していますか?彼はユーザー名(または電子メール)とパスワードを持っていますか?彼がデータベースにユーザーのパスワードを明示的に挿入することを提案している場合は、彼を解雇したいかもしれません........... 他のモデルを同じ部分で捕捉するには、CMSにthemesモデル/スキーマ。これらの更新を同じ関数で処理させると、私は実際にはmulterを実装することができませんし、zipファイルは保存されません(または新しいユーザーを登録するとthemeプロパティを持たないとクラッシュする)そのテーマのそのバージョンが既に存在するのか、それとも同じテーマの更新であるのかをチェックする必要はありません。

mongooseスキーマで修正できるものは、required: trueunique: trueのようなフィールドプロパティを設定しますが、すべてがそうすることはできません。

怠け者だが、最終的には別のURLやファイル/モジュールに分割する必要があります。

私のCMSフォルダ構造のルーティング一部:私はこのアプローチを使用して行う

enter image description here