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

Node.js(Express) API接收Flutter请求时参数丢失问题排查

问题解决:Flutter调用Express API参数无法传递(返回400错误)

核心原因

Thunder Client能正常传参是因为它的请求格式(通常为JSON)和后端参数解析逻辑匹配,但Flutter默认的http.post请求格式与后端解析方式不兼容,导致后端无法识别userId参数。

解决方案

方案1:调整Flutter请求为JSON格式(适配后端express.json()解析)

如果你的Express后端使用express.json()解析请求体,需要让Flutter发送JSON格式请求,步骤如下:

  1. 导入dart:convert包
  2. 设置请求头Content-Type: application/json
  3. 将请求体序列化为JSON字符串

修改后的Flutter代码:

import 'dart:convert';
import 'package:http/http.dart' as http;

// ...

var response = await http.post(
  Uri.parse('https://api.birqr.click/check-user'),
  headers: {'Content-Type': 'application/json'},
  body: jsonEncode({'userId': '64708d926cf77c7ebb047199'}),
);

方案2:确保后端正确解析表单格式请求(适配Flutter默认请求)

如果你的Express后端期望接收x-www-form-urlencoded格式的表单数据,需确认后端已配置对应解析中间件:

// 在Express项目中添加
app.use(express.urlencoded({ extended: true }));

注:若Thunder Client测试时用的是表单格式,该配置应该已存在;但如果之前只配置了express.json(),会导致Flutter的默认请求无法被解析。

补充:CORS配置验证

虽然你已添加CORS插件,可确认配置是否允许Content-Type头部,避免请求被拦截:

const cors = require('cors');
app.use(cors({
  allowedHeaders: ['Content-Type'], // 明确允许Content-Type头部
  methods: ['POST'] // 确保POST方法被允许
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:12