坑了老子一下午的body拿不到 与 格式奇葩
结论: 两边都要进行格式的配置
客户端发请求,请求头的配置request.setValue("application/json", forHTTPHeaderField: "Content-Type" )
服务端路由或中间件的配置- 入参的时候 传一个 var jsonParser = bodyParser.json() 进去
具体历程如下
阶段一 :配置好了服务端的body-parser 然而解析结果奇葩
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({extended:true});
var jsonParser = bodyParser.json();
server.use(urlencodedParser); //中间件来一发 -----这里是错误原因之一, 文本内容格式设置了,但json内容就没设置,后面有讲
结果一:{你打算传的字典:""} (express服务这边得出大字典,你的请求体当作键,值却找不到,废话,本来就不是这个格式)
思考一:格式问题,那到底是传的时候格式不对,还是解析的时候他自己意淫
然后各种尝试,各种同性交友,有人说客户端那边请求头要设置
阶段二:修改客户端代码,设置请求头参数,结果还是undefined
熟悉的味道,听起来靠谱,oc的时候干过这事儿
//request.setValue("application/json", forHTTPHeaderField: "Accept");-某外国sb,关键的域不是accept
//request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") -文本内容的 我主要要解决内容是json的
关键:request.setValue("application/json", forHTTPHeaderField: "Content-Type")
然而还是不行。。。request.body 是 undefined
what the sam hill。。。。
然而我想要放弃去投靠perfect时,最后的绝望尝试下,居然成功了
关键:server.post('/room/creat', jsonParser,function(request, response) {}
在设置路由的时候或者中间件的时候配一次:server.use(jsonParser);
-变量声明看最前
相关坑:客户端请求体的json打包
系统自带的就够用,如下。
guard let result = try?JSONSerialization.data(withJSONObject: testDic, options: JSONSerialization.WritingOptions.prettyPrinted) else {}
返回解析:
你非要与直接与你 封好的对象类型 相互可转,这个我没研究6⃣️ ,请各位指教。
如果你苦恼于类型any 的 强转,内容层次深的话,研究一下SwiftyJson 这个库。
时间有限,文章个人色彩重,见谅,有相关问题和坑我不吝赐教,也请各位多多指教。