1. ホーム
  2. node.js

[解決済み] sequelizeを使用したnodeアプリの構成は?

2022-07-09 01:47:52

質問

sequelize ORMを使用したnodejsアプリの例を探しています。

私の主な懸念は、モデルが require() 依存ループのために互いに複雑な関係を持っている場合、別々の js ファイルでモデルを定義することは不可能に近いと思われることです。おそらく、人々はすべてのモデルを非常に長い1つのファイルに定義しているのではないでしょうか?

私は主に、モデルがどのように定義され、アプリを通して使用されるかに興味があります。私は、私が自分でやっていることが、物事を行うための良い方法であるといういくつかの検証をしたいのです。

どのように解決するのですか?

ショートストーリー

この場合のトリックは、モデルを初期化しないことです。 ファイルで初期化するのではなく、初期化のために必要な情報を提供し、中央のモジュールにモデルの設定とインスタンス化の処理を任せることです。

というわけで、手順は以下の通りです。

  • フィールド、リレーションシップ、オプションなど、モデルに関するデータを含むいくつかのモデルファイルを用意します。
  • これらのファイルをすべてロードし、すべてのモデルクラスとリレーションシップを設定するシングルトンモジュールを用意します。
  • app.jsファイルにシングルトンモジュールをセットアップします。
  • シングルトンモジュールからモデルクラスを取得します。 しない 使用 require を使用せず、代わりにシングルトンからモデルをロードします。

長い話

このソリューションのより詳細な説明と、対応するソースコードです。

http://jeydotc.github.io/blog/2012/10/30/EXPRESS-WITH-SEQUELIZE.html

編集:これは非常に古い答えです!(情報を下に読んでください。(情報を得るために下を読んでください)

古くて、いろいろな意味で限界です!

  • 最初の は、@jinglesthula がコメントで述べているように(そして私も経験しました)、これらのファイルを要求することに問題があります。それは require と同じようには動作しないからです。 readdirSync !

  • 第二 - あなたは 非常に 関係で制限されています。このコードでは オプション を提供しないので、あなたは 使用不可 を作成することができます。 belongsToMany が必要なので through というプロパティを作成することができます。最も基本的なアソシエイトを作成することができます。

  • 第三の - あなたはモデル関係で非常に制限されています! コードをよく読むと、リレーションは オブジェクトです。 の代わりに 配列 というように、もしあなたが を1つ以上 のアソシエーションを作りたい場合(例えば、2回の belongsTo のように) - できません!

  • 第四 - シングルトンは必要ありません。nodejsのすべてのモジュールはそれ自体でシングルトンなので、このすべてが無意味にかなり複雑になっています。

ファームさんの回答を見てみてください (記事へのリンクが切れていますが、sequelizeのこの公式サンプルで直します。 https://github.com/sequelize/express-example/blob/master/models/index.js - をクリックすると、プロジェクト全体を見ることができます。)

p.s. アップボーティングされすぎて、新しい回答が表示されなくなったので、この投稿を編集しています (私がそうだったように)。

編集しています。 ただ、同じ投稿のコピーにリンクを変更しましたが、Githubのページ