2011-09-13 26 views
0
var locationJSON, locationRequest; 
locationJSON = { 
    latitude: 'mylat', 
    longitude: 'mylng' 
}; 
locationRequest = { 
    host: 'localhost', 
    port: 1234, 
    path: '/', 
    method: 'POST', 
    header: { 
    'content-type': 'application/x-www-form-urlencoded', 
    'content-length': locationJSON.length 
    } 
}; 

var req; 
req = http.request(options, function(res) { 
    var body; 
    body = ''; 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    return res.on('end', function() { 
    console.log(body); 
    callback(null, body); 
    }); 
}); 
req.on('error', function(err) { 
    callback(err); 
}); 
req.write(data); 
req.end(); 

もう一方では、node.jsサーバーがポート1234をリッスンしていて、要求を取得しません。何か案は?Expressを使用してデータをPOSTできないのはなぜですか?

+0

'req.write'には文字列、配列、またはバッファが必要です。 JSONを配列に変換する必要がありますか? – Shamoon

+0

JSON.stringify()で実行し、Content-Typeをapplication/jsonに設定します。 –

答えて

1

あなたはreq.write(data)を行っていますが、私が見る限り「データ」はどこにも定義されていません。 locationJSONには「緯度」と「経度」プロパティしかないため、 'content-length'ヘッダーをlocationJSON.lengthに設定しています。これは未定義です。

'data'を適切に定義し、 'content-type'と 'content-length'を代わりに使用するように変更します。

var locationJSON, locationRequest; 
locationJSON = { 
    latitude: 'mylat', 
    longitude: 'mylng' 
}; 

// convert the arguments to a string 
var data = JSON.stringify(locationJSON); 

locationRequest = { 
    host: 'localhost', 
    port: 1234, 
    path: '/', 
    method: 'POST', 
    header: { 
    'content-type': 'application/json', // Set the content-type to JSON 
    'content-length': data.length  // Use proper string as length 
    } 
}; 

/* 
.... 
*/ 

req.write(data, 'utf8'); // Specify proper encoding for string 
req.end(); 

これがまだ動作しない場合は教えてください。

+1

Content-Typeをapplication/jsonに設定し、req.write(JSON.stringify(data)); –

+0

彼は自分のサーバーの設定方法を指定していないので、あまりにも多くのものを変更するつもりはありませんでしたが、サーバがコンテンツタイプapplication/jsonで引数をデコードできればうまくいくでしょう。 – loganfsmyth

+1

投稿のタイトルはExpressと言っており、彼は彼の例ではExpressの機能を使用していません。したがって、私は、要求を受け取ったサーバーがExpressであると仮定します。 BodyParserミドルウェアは、application/jsonのデコードをサポートし、req.bodyに情報を配置します。 –

関連する問題