2017-03-13 8 views
-1

rx-nodeライブラリを使用すると、このコードが動作することが期待されます。しかし、それは ソケットがストリームであるか

stream.pause(); 
     ^

TypeError: Cannot read property 'pause' of undefined 

netドキュメントはそれがあるように見えるにもかかわらず socketstreamとして認識されません。

は、どのように私ははい、ソケットがストリームであるnet.createServer()

var RxNode = require('rx-node'); 
var server; 
var sSocket; 

server = net.createServer(function (socket) { 
    sSocket = socket; 
}); 

var subscription = RxNode.fromStream(sSocket, 'ondata') 
    .subscribe(function (x) {process.stdout.write("Got data " + x + "\n"); }); 

server.listen(xxxxx, 'xxx.xxx.xx.xxx'); 
+1

私はrx-nodeに慣れていませんが、 'var subscription = ...'は 'net.createServer'コールバック関数内にある必要があります。そうでなければ' sSocket'は未定義の変数ですそのコードが実行されます。 – Jekrb

+2

それは "認識"についてではなく、その時点でそのような定義された変数がないことをエラーが明確に述べている場合は、コードの順序を修正するか変数を宣言する必要があります – Etki

+0

Jekrbが正しいです。 – Ivan

答えて

0

stream部分を取得します。あなたが得る問題は、ストリームではなく、定義されていないということではありません。このとき

Class: net.Socket# Added in: v0.3.4 This object is an abstraction of a TCP or local socket. net.Socket instances implement a duplex Stream interface. They can be created by the user and used as a client (with connect()) or they can be created by Node.js and passed to the user through the 'connection' event of a server. [emphasis added]

stream.pause(); 

はあなたにこのエラーを与える:

TypeError: Cannot read property 'pause' of undefined 

それはstreamがウントであることを意味ドキュメントを参照してください。いいえ、それはストリームではありません。

streamは、RxNode.fromStream()に渡す変数sSocketがコードを見るだけで明らかに定義されていない可能性が最も高いです。評価の順序は次のようなものです:

var sSocket; // (1) 

server = net.createServer(function (socket) { // (2) 
    sSocket = socket; // (4) 
}); 

var subscription = RxNode.fromStream(sSocket, 'ondata') // (3) 

これは、定義される前にそれを使用しようとしています。

今、定義された後にどのように使用するのですか? net.createServer()コールバック、またはそのコールバックが起動した後に開始される関数で使用する必要があります。

コードにもう1つ問題があるのは、net.createServer()に渡す関数が '接続'イベントのリスナーとして自動的に設定されるconnectionListenerであり、それが他のものであるかのように使用しているようです。ドキュメントでの例を参照してください。

それはかなり正確にあなたがやろうとしているものと同じです。

関連する問題