2017-06-29 6 views
0

Meteorクライアントからサーバーに要求を送信し、サーバーがWebサイトにHTTP要求を行い、その応答をクライアントに返したいとします。メテオ収集なしのサーバー側ジョブを取得する

REST Webサーバーでは、HTTP GETをクライアントからサーバーに送信し、サーバーは独自の要求を行い、クライアントに応答します。

私はMeteorアプリケーションにRESTインターフェースを追加しておらず、このオーバーヘッドをこの1つの必要性に追加したくありません。しかし、これを実現するためにコレクションを使用することは不十分であり、適切なツールではありません。

Meteorクライアントがコレクションを使用せずに何かをして応答を得るよう安全にサーバに依頼する方法はありますか?私は流星を乱しているなどの方法:

Meteor.methods({ 
    '/http/get'(name, cbk) { 
     cbk = cbk || function() {}; 
     HTTP.get('http://www.google.com', {}, (err, data) => { 
      cbk(err, data); 
     }); 
    }, 
}); 

しかし、これは動作していないようです。呼び出しはクライアント側で行われています。

答えて

1

これはまさにメテオールの方法です。

Meteor methods docs

サーバー まず、サーバー上のあなたの方法を定義します。

Meteor.methods({ 
    // Namespace for clarity 
    'make.rest_call'(callback) { 
     HTTP.get('http://www.google.com', {}, (err, data) => { 
      callback(err, data); 
     }); 
    } 
}); 

OR

を使用すると、データに何かをするクライアントが必要な場合は、(ここで約束を返しますpromise docs

Meteor.methods({ 
    // Namespace for clarity 
    'make.rest_call'(callback) { 
     return new Promise((resolve, reject) => { 
      HTTP.get('http://www.google.com', {}, (err, data) => { 
       if (err) { reject(err); } 
       resolve(data); 
      }); 
     } 
    } 
}); 

クライアント 次に、あなたのクライアントからそれを呼び出す:

// Simple call (just makes the call, does nothing on the client) 
Meteor.call('make.rest_call'); 

OR

// Promise based call 
Meteor.call('make.rest_call', (error, result) => { 
    if (error) { /* do something with error */ } 

    // result contains your promise. 
    result.then((data) => { 
     // do something with returned data 
    }); 
}); 
+0

ありがとう!私はこれを試してみると、クライアントはサーバーと同様にHTTPリクエストを作成しようとし、CORSエラーを取得します。サーバだけがHTTPリクエストを作成してクライアントに返すようにするにはどうすればよいですか? – dthree

+0

私は現在、HTTPリクエストにtry/catchを追加することでこれを動作させていますが、これは厄介なようです。 – dthree

+0

照会されたオリジンに特別なヘッダーがない限り、現代のWebクライアントからのクロスオリジン要求を行うことはできません。これは必ずしも可能ではなく、実行可能であるとは限らず、この呼び出しをサーバーから行う必要があるのはこのためです。私はコードの各ビットがどこに行くかを正確にラベル付けしておきます。 – Jeremiah