【问题标题】:how to send Post request from express.js to another server ( java)?如何将 post 请求从 express.js 发送到另一台服务器(java)?
【发布时间】:2013-12-11 18:09:14
【问题描述】:

我必须将数据(json 对象)发送到另一个网络服务器(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);

这不起作用。我该怎么做?

【问题讨论】:

    标签: node.js post request


    【解决方案1】:

    您正在为发布请求重复 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 像空的一样来了
    • 使用req.body获取另一台服务器上的数据。
    • 我将 json 对象作为数据发送,所以我应该在这里更改内容类型吗?如果是我该怎么办?
    • 将其设置为application/json,您可能不需要对帖子数据进行字符串化。另外,如果可能的话,使用request模块,使用http.request更方便。
    【解决方案2】:

    请列出确切的错误,“这不起作用...”对于识别问题没有多大帮助。代码也很好,有一些小问题。

    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 以获取正在发布的数据,在这种情况下是登录凭据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多