Node.js 如何将Post请求从express.js发送到另一台服务器(java)?

Node.js 如何将Post请求从express.js发送到另一台服务器(java)?,node.js,post,request,Node.js,Post,Request,我必须将数据(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 o

我必须将数据(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);
这是行不通的。如何才能做到这一点?

请列出确切的错误,“这不起作用…”对识别问题没有多大帮助。此外,代码还可以处理一些小问题

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上应该有一个服务器,为发布的数据提供/login响应。在本例中,为发布请求提供登录凭据。

您正在重复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);

请将代码中的请求主机和路径更新为所需的值。如果仍然不适合您,请告诉我。

非常感谢您的回复……我已尝试将此node.js服务器连接到另一个node.js服务器,这正在发送请求,但无法获取数据……如何获取?req.query像emptyUse
req.body
一样来获取另一台服务器上的数据。我正在发送json对象作为数据,所以我应该在这里更改内容类型吗?如果是,我该怎么办?将其设置为
application/json
,您可能不需要对post数据进行字符串化。另外,如果可能,使用
request
模块,使用
http.request
更方便。