NodeJS 创建 HTTPS Rest body 请求 JSON

Posted

技术标签:

【中文标题】NodeJS 创建 HTTPS Rest body 请求 JSON【英文标题】:NodeJS create HTTPS Rest body request JSON 【发布时间】:2017-09-25 10:09:21 【问题描述】:

我正在尝试使用以下代码在 nodejs 中执行 HTTPS REST 请求:

var querystring = require('querystring');
var https = require('https');

var postData = 
    'Value1' : 'abc1',
    'Value2' : 'abc2',
    'Value3' : '3'
;
var postBody = querystring.stringify(postData);

var options = 
    host: 'URL'
    port: 443,
    path: 'PATH'
    method: 'POST',
    headers: 
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': postBody.length
  
;

var req = https.request(options, function(res) 
  console.log(res.statusCode);
  res.on('data', function(d) 
    process.stdout.write(d);
  );
);
req.write(postBody);
req.end();

req.on('error', function(e) 
  console.error(e);
);

请求有效,但不如预期。正文不会以 JSON 格式发送,看起来像:

RequestBody":"Value1=abc1&Value2=abc2&Value3=3

输出应该是这样的:

RequestBody":"[\r\n \r\n \"Value3\": \"3\",\r\n \"Value2\": \"abc2\",\r\n \"Value1\": \"abc1\"\r\n \r\n]

我认为它与stringify有关,也许我无论如何都必须将其转换为JSON格式..

【问题讨论】:

【参考方案1】:

你需要改变内容类型。试试这样

var querystring = require('querystring');
var https = require('https');

var postData = 
    'Value1' : 'abc1',
    'Value2' : 'abc2',
    'Value3' : '3'
;
var postBody = postData;

var options = 
    host: 'URL'
    port: 443,
    path: 'PATH'
    method: 'POST',
    headers: 
        'Content-Type': 'application/json',

  
;

var req = https.request(options, function(res) 
  console.log(res.statusCode);
  res.on('data', function(d) 
    process.stdout.write(d);
  );
);
req.write(postBody);
req.end();

req.on('error', function(e) 
  console.error(e);
);

【讨论】:

同上错误:TypeError: First argument must be a string or Buffer【参考方案2】:

我用以下方法解决了我的问题。

jsonObject = JSON.stringify(
    'Value1' : 'abc1',
    'Value2' : 'abc2',
    'Value3' : '3' 
);
var postheaders = 
    'Content-Type' : 'application/json',
    'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
;

【讨论】:

【参考方案3】:

在请求的标头中指定了'Content-Type': 'application/x-www-form-urlencoded'。您可以尝试将其更改为'Content-Type': 'application/json'

【讨论】:

我刚刚意识到您将数据作为字符串传递。这不是必需的,您只需传递一个对象即可。 如果我通过删除 stringify 命令来尝试这个,我会得到以下错误:TypeError: First argument must be a string or Buffer

以上是关于NodeJS 创建 HTTPS Rest body 请求 JSON的主要内容,如果未能解决你的问题,请参考以下文章

[转]nodeJs--koa2 REST API

Nodejs Rest API 与 mongoose 和 mongoDB

在 NodeJS REST api 中动态获取 JSON 数据

Rest API Node Js & Express,创建链接(href)到自己

如何在 API 的 RPC 和 REST 之间做出决定?

Node js中向rest服务发送https请求的步骤