同様の問題がありました。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.js
。APS
私のアプリケーションの単なる名前空間です。サブスクリプションまたはメソッドを使用する前に、これを必ずロードしてください (そのため、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.connection
とAccounts.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);
}