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

Flutter向Express.js传值失败:Node.js无法接收请求求助

Flutter向Express.js发送数据时req.body为空的问题排查

一、Flutter代码中的核心错误

  • Content-Type拼写错误:请求头里的'Content-Type':'aplication/json'少了一个字母p,正确写法是application/json。这个拼写错误会导致Express无法识别请求体格式,直接跳过JSON解析,最终req.body为空。
  • 建议添加异常捕获,方便排查请求失败的具体原因。

修正后的Flutter代码片段:

try{
    var regbody={
      "username":username,
      "fullname":fullname,
      "password":password,
      "image":image,
    };
    print(regbody);
    var response=await http.post(
      Uri.parse("http://192.168.1.10:5000/datauser"),
      headers: {
        'Accept':'application/json',
        'Content-Type':'application/json', // 修正拼写错误
      },
      body: json.encode(regbody)
    );
} catch(e) {
  print(e); // 捕获异常,排查请求问题
}

二、Express.js代码中的问题

  1. 错误判断req.files:你的Flutter请求发送的是JSON数据,并非multipart/form-data类型的文件上传,所以req.files必然为null,这行判断会直接返回400错误,后续逻辑根本不会执行。如果不需要上传文件,直接删除这行判断;如果需要传文件,需修改Flutter为表单上传方式,并在Express中配置multer中间件。

  2. 缺少JSON解析中间件:Express默认不会自动解析JSON请求体,必须在主入口文件(如app.js)中配置express.json()中间件,否则req.body会是undefined。配置代码如下:

const express = require('express');
const app = express();

// 必须在路由挂载前配置JSON解析
app.use(express.json());

// 挂载你的路由
app.use('/datauser', yourRouter);
  1. 异步函数写法错误:控制器中async(error)=>{...}是一个未被调用的回调函数,逻辑完全不会执行。正确写法是把整个控制器逻辑包裹在async函数中:
// 修正后的控制器代码
exports.createUser = async (req, res) => {
  try {
    const { username, fullname, password, image } = req.body;
    
    // 添加参数校验,避免空值入库
    if(!username || !fullname || !password) {
      return res.status(400).json({msg: "必填参数不能为空"});
    }

    await dataUser.create({
      username,
      fullname,
      password,
      image,
      url: "hhh"
    });
    res.status(201).json({msg: "Registration Successfully!"});
  } catch (error) {
    console.log(error.message);
    res.status(500).json({msg: error.message});
  }
}

三、额外排查建议

  • 确认Flutter设备和Express服务器在同一局域网内,IP192.168.1.10正确且端口5000未被占用。
  • 在Express路由中添加日志,打印请求头和请求体,确认请求是否到达服务器:
app.post('/datauser', (req, res) => {
  console.log("请求头:", req.headers);
  console.log("请求体:", req.body);
  // 后续控制器逻辑
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:36:24