2016-11-24 13 views
1

ではない私は、クライアント・コンポーネント内からMeteor.methodを呼び出すしようとしています:流星方法、:child_process.spawnは機能

Meteor.call('execute', this.parameter); 

Meteor.methodsは、機能を持っていますこれは次のようにプロセスを生成します:

cp.spawn(pathtoscript, ['-t', parameter.myid], options); 

これが正常に実行され、有効なプロセススポーンである(それが完了するまでに30秒かかります)、しかし、ブラウザのコンソールは、呼び出しが行われた直後にエラーを吐く:

Exception while simulating the effect of invoking 'execute' TypeError: cp.spawn is not a function(…) TypeError: cp.spawn is not a function

私はプロセスを起動して機能を終了しようとしましたが、私は「close」イベントを待つことも試みました。バックエンドでの実行は成功しますが、ブラウザコンソールでは例外がスローされます。

私もMeteor.methodsで戻り値を追加する際に、非同期

Meteor.call('execute', this.parameter, function(error, result) { 
    if (error) { 
     alert(error, error.reason); 
    } 
     console.log(result); 
    });*/ 

Meteor.methodsを呼び出そうとしています。そして、それはいつも同じように終わります。

このような場合にプロセスを産み出す適切な方法を教えてください。

答えて

0

これは、メソッドコードがクライアントとサーバーの両方にあるためです。ブラウザにはspawnが存在しないため、クライアント上で実行することはできません。

は、あなたは、単にだけか、単に条件 Meteor.isServerif文の中にそれを包むサーバーコードにあなたの方法を移動することができ、これを修正するには:

if (Meteor.isServer) { 
    Meteor.methods({ 
    execute(params) { 
     //... 
    } 
    }); 
} 
+0

おかげで、それが働きました。このコードがクライアントから呼び出され、サーバー上で実行される必要があったので、ちょっと混乱しているように見えます。流星文書で明示的な情報を見つけることができませんでした。 –

+0

このhttps://guide.meteor.com/structure.html#files-outsideをチェックしてください – Khang