0

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ライブラリで何か間違ったことをしていますか?

4

3 に答える 3

2

これを投稿した直後に、私がHTMLバージョンで行っていたのにnode.jsバージョンでは行っていなかったことが、リクエストでContent-Typeを設定していることに気付きました。オプションをこれに変更すると、機能します。

var options = {
   host: '127.0.0.1',
   port: 8090,
   path: '/theurl/',
   method: 'POST',
   headers: { "Content-type": "application/x-www-form-urlencoded" }
};
于 2012-10-24T04:10:45.740 に答える
0

以下のコードを使用してください

var querystring = require('querystring');

    var data = querystring.stringify({
          username: yourUsernameValue,
          password: yourPasswordValue
        });

    var options = {
        host: 'my.url',
        port: 80,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length
        }
    };

    var req = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            console.log("body: " + chunk);
        });
    });

    req.write(data);
    req.end();
于 2013-08-22T12:34:52.273 に答える
-1

app.jsファイルに次のものが追加されていることを確認してください。

var bodyParser = require('body-parser'); // npm i body-parser

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
于 2020-10-20T19:12:13.003 に答える