node.jsサーバーが別のnode.jsサーバーに対してhttpPOSTリクエストを実行するのに問題があります。思い通りにPOSTを実行する小さなHTMLページを作成できるので、問題はhttpライブラリまたはその使用方法にあるとかなり確信しています。
POSTを受信するサーバーの設定方法は次のとおりです。
var server = restify.createServer({
name: 'some server',
version: "1.0.0"
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.bodyParser());
server.post('/theurl/', handler.handlePost);
server.listen(config.port, function() {
console.log("starting server on port %d", server.address().port);
});
handlePostメソッド内で私はこれを行っています:
exports.handlePost = function(req, res, next) {
console.log("body: %s", JSON.stringify(req.body));
console.log("params: %s", JSON.stringify(req.params));
}
POSTを送信しているサーバーがそれを実行している方法は次のとおりです(これはnode.js http docsから直接取得されました)
var options = {
host: '127.0.0.1',
port: 8090,
path: '/theurl/',
method: 'POST'
};
var req = http.request(options, function(res) {
ses.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.write("<some>xml</some>");
req.end();
POSTを実行すると、handlePostメソッド内でreq.bodyとreq.paramsの両方が未定義になります。
しかし、次のHTMLをブラウザに入れれば、サービスに問題なく投稿できます。
<html>
<head>
<script>
function doPost()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","http://localhost:8090/theurl/",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("<some>xml</some>");
}
</script>
</head>
<body>
<button type="button" onclick="doPost()">POST data</button>
</body>
</html>
だから私はnode.jshttpライブラリで何か間違ったことをしていますか?