客户端
将JSON.stringy
应用于对象后,它会像这样发送到节点服务器(作为POST请求):
{"id":"topFolder","parentPath":null,"name":"newProject","is":"root","children":[]}
我通过Polymer的iron-ajax-element在客户端发送请求:
<iron-ajax
id="ajaxSave"
method="POST"
url="/save"
handle-as="json"
on-response="doit"
</iron-ajax>
使用此功能发送:
save: function() {
var v = JSON.stringify(this.data);
this.$.ajaxSave.body = v;
this.$.ajaxSave.generateRequest();
}
服务器端
然后我尝试在Koa服务器上JSON.parse
请求的正文(使用Koa-Body作为正文解析器):
router.post('/save', body, function*(){
let data = JSON.parse(this.request.body);
this.body = "all ok";
})
我得到一个SyntaxError: Unexpected token o
,原始主体看起来像这样:
{ '{"id":"topFolder","parentPath":null,"name":"new Project","is":"root","children":': [ '' ] }
为什么收到的身体看起来有所不同,我该如何解决?
编辑:这是请求的完整卷曲命令:
卷曲'http://localhost:3000/save' - H'授权:基本YWRtaW46ZXZvbGE =' - H'原产地:http://localhost:3000' - H'接受编码:gzip,收缩'-H'接受语言:de -DE,de; q = 0.8,en-US; q = 0.6,en; q = 0.4'-H'用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_2)AppleWebKit / 537.36(KHTML,与Gecko一样) )Chrome / 46.0.2490.80 Safari / 537.36'-H'内容类型:application / x-www-form-urlencoded'-H'accept:application / json'-H'Referer:http://localhost:3000/'-H' Cookie:ajs_anonymous_id =%22e43155da-6541-45de-af9f-046ff5ac7b3c%22; currentUserId = 34; -H'连接:keep-alive'--data'{“id”:“topFolder”,“open”:false,“parentPath”:null,“name”:“new Project”,“children”:[]} ' - 压缩
答案 0 :(得分:2)
您的对象已经是一个对象。
JSON.parse()
用于将包含JSON表示法的字符串转换为Javascript对象。
例如,尝试:this.request.body["id"]
获取其中一个属性。
答案 1 :(得分:1)
问题是content-type
设置为application/x-www-form-urlencoded
。
它必须是application/json
答案 2 :(得分:0)
通常,body不是字符串,因此请尝试将其明确地转换为字符串。
body.toString()
如果它没有帮助...... 在某些传输库中,您必须在使用它之前通过调用body.read()来读取body。读操作可以是异步..
使用q-io看起来像
request(someURL)
.then( function(res) {
return res.body.read()
})
.then( function (body){
obj = JSON.parse(body.toString()
})