1

ノード上でExpress.jsとMongooseを使用してRESTAPIを構築する-モデルまたはルーターでコード設計の問題に遭遇しました-関係をどこで処理する必要がありますか?

まず、私はMVCなどにかなり慣れていません。express.jsは完全なMVCではありませんが、ベストデザインプラクティスに従いたいと思います。

問題はかなり簡単です。アプリにはユーザーがいて、各ユーザーは複数のドキュメント(プロジェクト、注文など)を持つことができます。明らかに、作成されるすべてのドキュメントのユーザーIDを少なくとも保存する必要があります。問題は、どこでそれを行うべきかということです。

各ルーターのセッションからユーザーIDを取得してドキュメントに添付するか、現在のユーザーIDをグローバル変数(app.currentUserIDなど)に設定し、モデルでそれを使用してIDをに添付することができます。資料。

実際には、ユーザーが複数の組織を持つことができるというもっと興味深いケースがあり、特定の組織で操作するときにユーザーが作成する各ドキュメントの組織IDを設定する必要があります。

したがって、問題は、ルーター(エクスプレスには「コントローラー」自体がない)またはモデルでこの種のロジックを処理する必要があるかどうかです。

4

1 に答える 1

2

モデルでそれを行います。強制関係を作成していない場合でも、関連オブジェクトの実際のIDを保存するとモデルが変更されるため、ルーターにロジックを残す理由はありません。

MongoDB(およびMongoose)には、リレーショナルデータベースのような参照整合性がありません。これは、存在しないオブジェクトへのリレーションを挿入しても、データベースでエラーが発生しないことを意味します。これにより、アプリケーションコードでこれらの関係を処理できます。

マングースは、他の点ではかなりリベラルなnosqlDBに構造をもたらす試みです。そのため、 ObjectIdスキーマタイプを使用してこのような関係を作成する機能を提供します。

詳細については、次のSOの回答をお読みください:https ://stackoverflow.com/a/7813331/1801

于 2012-12-07T14:09:58.643 に答える