【问题标题】:How do I make a post request with a JSON payload to an external API using node?如何使用节点向外部 API 发出带有 JSON 有效负载的发布请求?
【发布时间】:2016-12-20 16:31:24
【问题描述】:

我正在尝试使用节点向外部 API 发出带有 JSON 有效负载的 POST 请求。

这是我的代码:

var express = require('express');
var bodyParser = require('body-parser');
var cors = require('cors');
var url = require("url");
var http = require("http");

var app = express();

app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));

app.post('/api', function(req, res) {
  var query = url.parse(req.url, true).query;
  var key = query.key;

  console.log('JSON PAYLOAD:');
  console.log(req.body); **//PAYLOAD COMES THROUGH AS EXPECTED**

  var options = {};

  options = {
    host: 'localhost',
    port: 1234,
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    path: '/api?key=1234'
  };

  var request = http.request(options, function(response) {
    response.setEncoding('utf-8');
    var responseString = '';
    response.on('data', function(data) {
      responseString += data;
    });
    response.on('end', function() {
      var resultObject = JSON.parse(responseString);
      res.json(resultObject);
    });
  });

  request.on('error', function(e) {
  });

  request.write(req.body) **//THIS METHOD SHOULD BE FORWARDING THE PAYLOAD BUT THIS IS NOT THE CASE...**
  request.end();
});

JSON 有效负载按预期从源端传入。但是我无法将此有效负载转发到外部 API。 'request.write(req.body)' 似乎是执行此操作的方法,但外部 API 仍在接收空负载。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript node.js http express


    【解决方案1】:

    在 app.post 块中试试这个

    var options = {
      host: 'localhost',
      path: '/api?key=1234',
      port: 1234,
      method: 'POST',
      headers: {'Content-Type': 'application/json'}
    };
    
    callback = function(response) {
      var str = ''
      response.on('data', function (chunk) {
        str += chunk;
      });
    
      response.on('end', function () {
        console.log(str);
      });
    }
    
    var req = http.request(options, callback);
    
    req.write(JSON.stringify(req.body));
    req.end();

    【讨论】:

    • 感谢您的回复,但很遗憾没有奏效。
    • 我收到以下错误:“TypeError: first argument must be a string or Buffer” 我尝试将有效负载更改为 simlpe 字符串,但这导致请求超时。
    • 您必须对req.body 进行字符串化,并确保您的本地主机 1234 服务器具有正文解析器
    • 您也可以在 npm 上使用 needle 或 request 模块,它可以帮助您在内部处理这些解析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2015-05-07
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多