2016-07-17 8 views
0

現在MeteorJSプロジェクトでnode-hue-api npmライブラリを動作させようとしています。私は既に橋の検索と接続ができています(ただし、流星の流れに完全には従っていません)。私はしかし、光を探して立ち往生しています。Metro.call()経由でオブジェクトから削除されたメソッド

私はブリッジコンポーネントのメソッドで次のコードを定義し、認証されたクライアントを取得するには:私は今、認証されたクライアントを取得するには、このメソッドを呼び出しています、私の光法(異なるファイル)で

import { Settings } from '../../settings/settings'; 
import { HueApi } from 'node-hue-api'; 

Meteor.methods({ 
    'philipsHue.bridges.client'() { 
     const hueSettings = Settings.findOne({ type: 'philips-hue' }); 
     return new HueApi(hueSettings.hostname, hueSettings.username); 
    } 
}); 

を:

Meteor.methods({ 
    'lights.scan'() { 
     var hueClient = new HueApi(Meteor.call('philipsHue.bridges.client')); 
     hueClient.lights().then((val) => { 
      val.lights.forEach(function (hueLight) { 
       let dbLight = Lights.findOne({ id: hueLight.id }); 

       if (dbLight) { 
        // we already have a db copy of this light, check for changes 
       } 
       else { 
        // we need a new local copy for this light 
        dbLight.insert(hueLight); 
       } 
      }) 
     }); 
    } 
}); 

返されたHueApiオブジェクトには正しい変数がありますが、すべてのメソッドが削除されています。未定義のメソッドエラーが発生します。これは、オブジェクトがMeteor.call()に渡された場合にのみ発生します。同じ関数内にオブジェクトを作成すると、そのメソッドがすべて存在します。このメソッドの動作をストリッピング引き起こしている何GitHub

これは私が持つ問題を抱えているライブラリのクラスですか?どうすれば修正できますか?上記のコメントから投稿

+0

この 'lights.scan'が実際には失敗しているところで述べたように、他のファイルのコードを表示してください。 –

+0

リンクが下部にあります。ファイル自体のコード自体はうまく動作しますが、メソッドのスコープはMeteorと連携していないようです –

+0

MeteorのメソッドはDDPで動作します。メソッドやメソッドで本格的な "オブジェクト"ではなくJSONだけを送信しますそのような。 Meteorがメソッド呼び出しなどを通じて送信するものは、Chromeの開発ツールを使用して[ネットワーク]タブに移動し、WS(Web Sockets)でフィルタリングすることで表示できます。 Collectionクエリー結果の結果を '変換 'しなければならないのと同じように、生のJSON変換をあなたが望む完全なオブジェクトに戻すためには、おそらく同様のことが必要です。 JavaScriptは実際には「オブジェクト」を扱うのではなく、プロトタイプを使ってそれらをシミュレートすることを覚えておいてください。 – CodeChimp

答えて

1

...

流星方法はDDP上で動作する、と私は、彼らが唯一のJSONとない方法や、との本格的な「オブジェクト」を送って、ほぼ確信しています。 Meteorがメソッド呼び出しなどを通じて送信するものは、Chromeの開発ツールを使用して[ネットワーク]タブに移動し、WS(Web Sockets)でフィルタリングすることで表示できます。コレクションのクエリ結果の結果を変換する必要があるように、生のJSONトランスフォームを必要な完全なオブジェクトに戻すために、おそらく同様のことを行う必要があります。 JavaScriptは実際には「オブジェクト」を扱うのではなく、プロトタイプを使ってそれらをシミュレートすることを覚えておいてください。

関連する問題