1

Sails.js のマルチテナンシー機能についてよく調べましたが、そのような機能がまだ実装されていないことはわかっています。最初のアイデアは、テナントごとに 1 つのデータベースを作成して、マルチテナント アプリを構築することでした。

Sails.js ではまだそのようなことはできないことに気付いたので、データベース ( POSTGRES ) を 1 つだけ作成するという別のアプローチを試みましたが、それぞれがテナントを表す多数のスキーマを使用しました。私の問題は、ログに記録されたユーザーに基づいて、特定のオブジェクトがどのスキーマに対してクエリを実行する必要があるかを動的に (実行時に) 定義する方法がわからない/わからない (Sails/Postgres アダプターで可能かどうかさえわからない) ことです。

このような問題に直面した人はいますか?どうすれば続行できますか?

英語で申し訳ありませんが、ありがとうございます。

4

3 に答える 3

0

この回答に基づいて、ウォーターラインの続編アダプターの問題だと思います。

それを行う方法は、モデルにプロパティを追加することです

  meta: {
    schemaName: 'schema'
  },

config/models.js でプロパティ schema が true に設定されている場合、複数のスキーマを定義することはできません。ユーザーをスキーマとしてのみ使用します。すべてのテーブルのスキーマの定義が機能していません。

于 2015-09-01T18:13:39.830 に答える
0

手がかりは、sails-postgresqlアダプター コード内にあります。そのヘルパーのいくつかには、次のビットが含まれています。

var schemaName = 'public';
    if (inputs.meta && inputs.meta.schemaName) {
      schemaName = inputs.meta.schemaName;
    } else if (inputs.datastore.config && inputs.datastore.config.schemaName) {
      schemaName = inputs.datastore.config.schemaName;
    }

実際、上記のようにmeta()の呼び出しを介して別の値が提供されない限り、またはスキーマ名がアプリケーション全体で構成されていない限り、ドライバーはデフォルトでpublicという名前のスキーマを探します。

すべてのモデルのスキーマ名を構成するには、 datastore.jsで発生する postgresql データストアの構成にschemaNameプロパティを含める必要があります。

...
default: {
   adapter: 'sails-postgresql',
   url: 'postgresql://username:password@localhost:5432/your_database_name',
   schemaName: 'your_schema_name_here'
}

これが整ったら、どのクエリにもmeta({ schemaName: 'blah'})を追加する必要はありません。私はこれに数日間苦労し、最終的にこの方法で解決しました。

于 2019-10-03T16:01:25.667 に答える