web-dev-qa-db-ja.com

Expressリクエストを別のサーバー(Java)に送信する方法

データ(jsonオブジェクト)を別のWebサーバー(Java)に送信する必要があります。

これは私のnode.jsコードです

var express = require('express');

var app = express();

app.get('/', function (req, res) {
    var data = querystring.stringify({
        username: "myname",
        password: " pass"
    });

    var options = {
        Host: 'www.javaserver.com',
        port: 8070,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(data)
        }
    };

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

});

app.listen(8090);

これは機能していません。これどうやってするの?

10
silvesterprabu

Postリクエストに対してreqおよびres変数を繰り返しています。私はあなたのコードを更新し、requestb.inで動作することをテストしました

var express = require('express');
var querystring = require('querystring');
var http = require('http');

var app = express();
app.get('/', function (req, res) {
  var data = querystring.stringify({
    username: "myname",
    password: " pass"
  });

  var options = {
    Host: 'requestb.in',
    port: 80,
    path: '/nfue7rnf',
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': Buffer.byteLength(data)
    }
  };

  var httpreq = http.request(options, function (response) {
    response.setEncoding('utf8');
    response.on('data', function (chunk) {
      console.log("body: " + chunk);
    });
    response.on('end', function() {
      res.send('ok');
    })
  });
  httpreq.write(data);
  httpreq.end();
});

app.listen(8090);

コード内のリクエストホストとパスを必要な値に更新してください。それでも問題が解決しない場合はお知らせください。

16
vmx

正確なエラーをリストしてください。「これは機能していません...」は問題の特定にはあまり役立ちません。コードはさらに、軽微な問題で問題ありません。

var http = require("http");
var querystring = require("querystring");
var express=require('express');
var app=express();
app.get('/',function(req, res) {
    var data = querystring.stringify({
        username: "myname",
        password: " pass"
    });

    var options = {
        Host: 'www.javaserver.com',
        port: 8070,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(data)
        }
    };

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

注意すべき唯一のことは、www.javaserver.com:8070にサーバーがあり、この場合はログイン資格情報がPOSTされるデータに対して/ loginに対する応答を返すことです。

2
Nitin...

同じことを実装しましたが、「connect ECONNREFUSED 127.0.0.1:80」エラーが発生します。 'エラー:ソケットはcreateHangUpError(_http_client.js:331:15)でSocket.socketOnEnd(_http_client.js:423:23)でemiToneNone(events.js:111:20)at Socket.emit(events.js: 208:7)endReadableNT(_stream_reader.js:1064:12)at _combinedTickCallback(internal/process/next_tick.js:138:11)at process._tickDomainCallback(internal/process/next_tick.js:218:9) `

どんな考えでも、外部IPにリクエストを送信しているときに「127.0.0.1」と表示されるのはなぜですか。