无法解析节点js中的json请求

时间:2018-08-07 09:35:01

标签: json node.js angular

我有以下角度数据要传递给节点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。

2 个答案:

答案 0 :(得分:1)

您应该使用Content-Type: application/x-www-form-urlencodedContent-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。

希望有帮助