节点向json post body

时间:2017-07-26 09:34:02

标签: json node.js

我将发布请求从.NET应用程序发送到节点REST api,其控制器名为“createPdf”

用于发送帖子请求的.NET代码似乎工作正常,我使用SerializeObject创建一个json对象,然后使用UrlEncode对json进行编码,然后在post请求中将其发送出去。

 Dim postjson As String = JsonConvert.SerializeObject(article)
 Dim request As WebRequest = WebRequest.Create("url")
 request.Method = "POST"
 Dim postData As String = WebUtility.UrlEncode(postjson)
 Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
 request.ContentType = "application/x-www-form-urlencoded"
 //go off and send the post request

这似乎以这种格式生成有效的json -

{
    "source": "le sauce",
    "subTopic": "le subtopic",
    "Title": "le title",
    "Body": "le body",
    "refs": "le refs",
    "lastUpdated": "19/12/2016 11:23:56"
}

但是当我发送json并尝试用我的节点控制器中的下面的代码解析json时,它似乎在json中添加了额外的括号和冒号。

节点控制器

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var fs = require("fs");

var wkhtmltopdf = require('wkhtmltopdf');

router.use(bodyParser.urlencoded({ extended: true }));

router.post('/', function(req, res) {
   console.log(req.body); 
   res.status(200).send('lol');   
});

module.exports = router;

这是从console.log(req.body)

输出的无效json
{ '{
    "source”:”le sauce“,
    ”subTopic”:”le subtopic“,
    ”Title”:”le title“,
    ”Body”:”le body“,
    ”refs”:”le refs“,
    ”lastUpdated":"19/12/2016 11:23:56"
}': '' }

由于某些原因,在某些时候将额外的括号,冒号,引号等添加到json并使json无效,我很确定它不会发生在.NET端,并且必须在Node尝试处理时发生发布请求,但我无法弄清楚在哪里。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:0)

如果您要发送JSON,那么这是不正确的:

request.ContentType = "application/x-www-form-urlencoded"

就像在服务器端这样:

router.use(bodyParser.urlencoded({ extended: true }));

很清楚地说,你发送了URI编码的表单数据,而不是JSON,并告诉body-parser解码URI编码的表单数据,而不是JSON。

发送正确的内容类型:

request.ContentType = "application/json"

...并使用正确的解析器:

router.use(bodyParser.json());

(请注意,如果您的端点需要URI编码的表单数据,而其他端点需要JSON,则可以使用多个解析器; body-parser将从内容类型中找出它。)

答案 1 :(得分:0)

将您的内容类型设置为application/json。由于您尝试发送JSON但实际上发送了url编码数据,因此Node无法正确解码。然后,尝试以下代码:

Dim httpWebRequest As HttpWebRequest = 
(HttpWebRequest)WebRequest.Create("http://url")
httpWebRequest.ContentType = "application/json"
httpWebRequest.Method = "POST"

Dim streamWriter As StreamWriter = new StreamWriter 
(httpWebRequest.GetRequestStream ())
Dim jsonData As String = "{'source':'lesauce','subTopic':'lesubtopic','Title':'letitle','Body':'lebody','refs':'lerefs','lastUpdated':'19/12/201611:23:56'}"
streamWriter.Write (jsonData)
streamWriter.Close ()

Get Response here