3

私はアプリケーションのデスクトップ部分からモバイルを分離しようとしている途中で、モバイル アプリケーションがデスクトップ アプリケーションとデータを共有するための手段として DDP.connect を試してみようと考えました。

私の最初のハードルは、Meteor の内部コレクションと出版物に関するものです。

ユーザーの認証方法を教えてください。login メソッドを呼び出してユーザーを認証できることはわかっていますが、Meteor.users で慣れ親しんだその他の優れたリアクティブ機能がすべて得られるわけではありません。

これは機能するはずですか? もしそうなら、パターンは何ですか?

ありがとう

4

4 に答える 4

5

これは、リモートサーバーと完全に統合されたものです(ユーザーセッションを忘れるコードの更新を除く)

if (Meteor.isClient) {
 Meteor.connection = DDP.connect('http://remote.site.com');
 Accounts.connection = Meteor.connection;
 Meteor.users = new Meteor.Collection('users');
 SomeCollection = new Meteor.Collection('remote_collection');
 Meteor.connection.subscribe('users');
 Meteor.connection.subscribe('remote_collection');
 // rest if the code just as always
}

このようにして、(accounts-base、accounts-passed などを介して) ログインを直接使用でき、ログイン メソッドを呼び出す必要はありません。accounts-ui を追加して include するだけ{{>loginButtons}}で機能します

于 2015-02-13T17:19:06.823 に答える
5

同様の問題がありました。2 つの異なるフロントエンド (どちらもデスクトップ用ですが) を同じバックエンドに接続して、同じデータベース、出版物、メソッドを使用できるようにしたいと考えていました。Meteor のソース コード (バージョン 1.1.0.3) を調べた後、次のようにしてこれを行うことができました。

1)バックエンドサーバー プロジェクトを開始します。

$ meteor --port 3100

2)フロントエンドプロジェクトでは、以下を に入れますserver/server.config.js

var backendUrl = process.env.BACKEND_URL;

if (backendUrl) {
    __meteor_runtime_config__.BACKEND_URL = backendUrl;
    __meteor_runtime_config__.ACCOUNTS_CONNECTION_URL = backendUrl;

    console.log('config', __meteor_runtime_config__);
}

3)フロントエンドプロジェクトでは、以下を に入れますclient/lib/client.connection.jsAPS私のアプリケーションの単なる名前空間です。サブスクリプションまたはメソッドを使用する前に、これを必ずロードしてください (そのため、libフォルダーに含まれています)。

if (typeof APS == 'undefined') APS = {};

var backendUrl = __meteor_runtime_config__.BACKEND_URL;

if (backendUrl) {
    APS.backendConnection = DDP.connect(backendUrl);

    Meteor.connection = APS.backendConnection;

    _.each(['subscribe', 'methods', 'call', 'apply', 'status', 'reconnect', 'disconnect'], function(name) {
        Meteor[name] = _.bind(Meteor.connection[name], Meteor.connection);
    });

    console.log('connected to backend', APS.backendConnection);
}

4)バックエンド サーバーを指す環境変数を使用して、フロントエンドサーバーを起動します。BACKEND_URL

$ BACKEND_URL=http://192.168.33.10:3100 meteor

それで全部です。クライアントの更新は問題なく動作します。そして、いじる必要はありませんAccounts.*


更新:私のソリューションに問題が見つかりました。サーバー メソッドを呼び出すときthis.userIdは、常にnullです。これは、Meteor.connectionAccounts.connectionが 2 つの別個の接続であったためです。同じ に対してBACKEND_URLです。認証時に、ユーザー ID は後者にのみ関連付けられます。固定client.connection.jsは以下の通り。

if (typeof APS == 'undefined') APS = {};

var backendUrl = __meteor_runtime_config__.BACKEND_URL;

if (backendUrl) {
    APS.originalConnection = Meteor.connection;

    // Accounts is already connected to our BACKEND_URL
    APS.backendConnection = Accounts.connection;
    // Reusing same (authenticated) connection for method calls and subscriptions
    Meteor.connection = APS.backendConnection;

    _.each(['subscribe', 'methods', 'call', 'apply', 'status', 'reconnect', 'disconnect'], function(name) {
        Meteor[name] = _.bind(Meteor.connection[name], Meteor.connection);
    });

    console.log('Connected to backend', APS.backendConnection);
}
于 2015-08-12T18:20:11.103 に答える