You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自签名证书搭建SSL服务后POST请求服务端接收不到请求体求助

问题排查方案

核心原因说明

你当前使用的express.json()中间件仅会解析请求头Content-Type为application/json的请求,如果请求格式不匹配、JSON内容非法、缺少对应解析中间件,都会导致req.body为空。

具体排查步骤

1. 先添加调试中间件确认原始请求数据

在app.use(express.json())之前插入以下代码,打印请求头和原始请求体,确认数据是否正常传到服务端:

app.use((req, res, next) => {
  console.log('请求Content-Type:', req.get('Content-Type'));
  let rawBody = '';
  req.on('data', chunk => rawBody += chunk);
  req.on('end', () => {
    console.log('原始请求体:', rawBody);
    next();
  });
});

如果打印的原始请求体为空,说明是客户端没有发送数据,优先排查客户端逻辑;如果原始请求体有内容,说明是服务端解析问题,继续往下排查。

2. 匹配请求格式添加对应解析中间件

  • 如果客户端发送的是application/json格式:保留app.use(express.json()),添加JSON解析错误捕获中间件,避免解析失败无提示:
    app.use(express.json());
    // JSON解析错误处理,放在express.json之后、路由之前
    app.use((err, req, res, next) => {
      if (err.type === 'entity.parse.failed') {
        console.error('JSON格式非法:', err.message);
        return res.status(400).send({error: '请求JSON格式错误'});
      }
      next();
    });
    
  • 如果客户端发送的是application/x-www-form-urlencoded格式(普通表单提交):添加对应解析中间件
    app.use(express.urlencoded({extended: true}));
    
  • 如果客户端发送的是multipart/form-data格式(带文件上传的表单):需要引入multer库处理,express原生不支持该格式解析。

3. 客户端配置验证

Postman端验证

  1. 发送请求时Body选择raw,右侧格式下拉选JSON
  2. 输入合法的JSON测试内容,比如{"test": "123"}
  3. 检查Headers标签,确认存在Content-Type: application/json

安卓客户端验证

  1. 发送请求时显式设置请求头:Content-Type: application/json; charset=utf-8
  2. 确认请求体是序列化后的合法JSON字符串,不要直接传对象或表单格式内容

4. 路由匹配验证

确认客户端请求地址为https://你的服务IP/域名:3443/,请求方法为POST,路径、方法和你代码中定义的app.post('/', ...)完全匹配。


内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:18:02