我有以下角度数据要传递给节点API。这里,我有一个使用POST方法传递给节点API的JSON数据。
var data = {
"que": {
"id": 1,
"status": 1,
"option": [
{
"opt_id": "",
"opt_txt": "02-10-1995"
}
]
}
};
let questionData = JSON.stringify(data);
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
let options = new RequestOptions({ headers: headers});
return this._http.post(url', questionData, options)
.map(x => x.json())
.catch(this.handleError);
在节点代码中,我得到了req.body中的以下数据:
不带解析的要求:{ '{"que":{"id":1,"status":1,"option":':{'{"opt_id":"","opt_txt":"02-10-1995"}': '' } }
我尝试解析req.body数据,但是我无法获得实际的字符串,因为它在字符串的开头添加了单引号,并在选项之后将其关闭,而另一个单引号在opt_id之前开始。
我的解析代码如下:
JSON.parse(req.body)
在app.js中,我有
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.urlencoded({ extended: false }));
请帮助我在节点侧获取正确的json。
答案 0 :(得分:1)
您应该使用Content-Type: application/x-www-form-urlencoded
或Content-Type: application/json
。发送x-www-form-urlencoded
为JSON(双重编码)的JSON无效。
也就是说,只需使用Content-Type: application/json
(将由bodyparser.json()
-中间件解释),并且不要对json值进行双重编码。
var data = {
// ...
};
let headers = new Headers();
headers.append('Content-Type', 'application/json'); // application/json is always UTF-8
let options = new RequestOptions({ headers: headers});
return this._http.post(url, questionData, options)
.catch(this.handleError);
答案 1 :(得分:1)
我在这里看到的问题是“字符串化”。您无需将字符串化的JSON传递给Node API POST主体,另一个是标头,将Content-Type标头标记为“ application / json”,也可以删除headers.append。默认情况下,它将Content-Type作为application / json。
希望有帮助