2011-08-13 7 views
0

私はノードをWebページに接続し、その結果を同じプログラムに返そうとしていました。ここで私が持っているコードです:http.requestノードのJavaScriptで使用するvarを返す

var http = require('http'), 
    sys = require('sys'), 
    fs = require('fs'); 

var options = { 
    host: 'myurl.com', 
    port: 80, 
    path: '/path/to/file', 
    method: 'POST' 
}; 

var myglobal = "the test"; 

var req = http.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk); 
    myglobal = chunk; 
    console.log("myglobal = " + myglobal); 
    }); 
}); 

// write data to request body 
req.write('data\n'); 
req.write('data\n'); 
req.end(); 

console.log("outside of http request: myglobal = " + myglobal); 

今私は起こるしたいプログラムの終了時にウェブページ「myurl.com」の出力の内容を持っている「myglobal」のためです。しかし、これは起こりませんし、 "チャンク"からコンテンツをプログラム内の別の変数に取得する方法を見つけることができません。内容が "req"変数か "res"変数のいずれかにあると思ったが、varsをダンプして出力を見つけることができなかった。最後に、 "myglobal"はまだ "テスト"と言っています。http.requestコード内の "myglobal"は "チャンク"の出力を持っています。それが何であるかを知りたいだけなので、私はここで行方不明になっています。ありがとう。

ダリル

答えて

0

あなたが正しいかどうかわかりません。あなたは、POSTリクエストを介して得たデータ(本体)で作業したいですか?そして、あなたはすべてのチャンクが受信された後に作業を継続する必要があります。

var http = require('http'), 
    sys = require('sys'), 
    fs = require('fs'); 

var options = { 
    host: 'blog.depold.com', 
    port: 80, 
    path: '/post/5936116582/changes-in-sequelize-1-0-0', 
    method: 'POST' 
}; 

var req = http.request(options, function(res) { 
    var data = "" 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { data += chunk }) 
    res.on('end', function() { 
    console.log("finished request", "data length:", data.length) 
    console.log("go on working here") 
    }) 
}); 

// write data to request body 
req.write('data\n'); 
req.write('data\n'); 
req.end() 
+0

はい、http.request領域内の「ここで作業しています」領域から印刷すると機能します。私が持っている問題は、私はソケットを介してページの出力を送信したいと思うし、ソケットがhttp.requestエリアの内側から正しく動作するようには見えません。私のソケット接続は最後のhttp.request括弧の外側でうまく動作します。なぜなら、そこの外側のPOST出力にアクセスしたいのです。私がこれを明確にしていないなら、私はより良い説明を挙げることができます。ありがとう。 – Darryl

0

は、過去数週間のために、この1で私の頭を強打し、原料の束を試した後末尾に「\ 0」を追加することを決定されたと出来た!したがって、socket.writeは自動的に "http.request"ブロックの外側に "\ 0"を追加しますが、そのブロック内に追加しません。だから、それは自動的に "\ 0"で終了するブロックの外にメッセージを送信するまで、http.requestメッセージを「キューに入れる」でしょう。なぜそれが私の考えを持っているように動作しますが、それはあります。

関連する問題