Swift发送POST请求的JSON数据无法被Node.js服务端正常接收问题
问题修复方案
1. Swift端缺失JSON请求头配置
当前代码已完成JSON序列化并写入请求体,但没有告知服务端请求体的格式是JSON,服务端默认不会按JSON规则解析请求内容。需要在设置httpBody的代码块中添加Content-Type请求头:
修改后的body处理代码:
if let body = body { do { // 生产环境可去掉.prettyPrinted选项减少请求体积 let jsonData = try JSONSerialization.data(withJSONObject: body, options: .prettyPrinted) request.httpBody = jsonData // 新增请求头配置 request.setValue("application/json", forHTTPHeaderField: "Content-Type") } catch { print(error.localizedDescription) } }
同时建议把原来的强制解包改成可选绑定,避免意外崩溃。
2. Node.js端缺少JSON请求体解析中间件
Express框架默认不会自动解析POST请求的JSON格式请求体,需要手动启用内置的JSON解析中间件,需要在你的路由定义前添加如下配置:
// 放在所有app.post、app.get等路由定义之前 app.use(express.json())
如果你使用的是4.16.0版本之前的Express,需要先安装body-parser包,再引入使用:
const bodyParser = require('body-parser') app.use(bodyParser.json())
修改完成后Node.js端即可正常读取req.body中的JSON数据。
可选验证步骤
- 可在Swift侧序列化完成后,将jsonData转为String打印,确认序列化结果符合预期
- 可在Node.js的接口中先打印
req.headers['content-type'],确认请求头已正常携带application/json
内容的提问来源于stack exchange,提问作者John Sorensen
相关产品推荐
相关产品推荐

