来自 Flutter 中 Dio.Post 方法的 API 中的空响应

Empty response in API from Dio.Post method in Flutter

我一直在尝试使用 Flutter Web 连接到本地 Node JS API。我正在使用带有 GET 和 POST 方法的 Dio dart 包,但是,我的 POST 方法的响应没有 return 任何东西。请参阅下面的几个代码实例和我所看到的:

在我的 Node JS 应用程序上,我正在接收来自 flutter 的信息:

'Server is listening on port 8000'
Successfully connected
/login2
{}

/login2 路径和 {} 是我 API 来自 Flutter 传入数据的 console.log。现在看 Dio.post 方法:

    Future post(String path, Map<String, dynamic> data) async {
    
    try {
      final result = await _dio.post(path, data: data);
      return result.data;
    } catch (e) {
      print(e);
      throw ('Error en el POST');
    }
  }

也尝试使用 HTTP,下面是一段代码:

Future post2(String id, String password) async {
    print(id);
    print(password);

    final response = await http.post(
      Uri.parse('http://localhost:8000/login2'),
      headers: {
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode({'user': id, 'password': password}),
    );
    print(response);
  }

我已经尝试使用 Postman,这就是我得到的结果:

/login2?user=10002&password=123456
{ user: '10002', password: '123456' }

来自同一个 console.logpath 和查询 {} 都是空的,这意味着我的节点服务器确实在接收数据。

按照@Wali Kan 的建议尝试使用 Postman 配置:

Future post(String path, Map<String, dynamic> data) async {
    final String formData = data.toString();

    var headers = {'Content-Type': 'text/plain'};
    var request =
        http.Request('POST', Uri.parse('http://localhost:8000' + path));
    request.body = formData;

    print(request.body);
    http.StreamedResponse response = await request.send();

    print(response);

    request.headers.addAll(headers);
    if (response.statusCode == 200) {
      print(await response.stream.bytesToString());
    } else {
      print(response.reasonPhrase);
    }

API 方仍在接收 /login2{}

我缺少的是如何成功接收 Flutter 数据,以便我可以在我的节点 API 上完成登录过程,然后重定向到用户配置文件页面。

关于测试或检查的内容有什么建议吗?如果您需要我分享更多代码片段,请告诉我,我已经在这里停留了好几个小时了……感谢您的宝贵时间。

headers

HttpHeaders.acceptHeader: "json/application/json",
HttpHeaders.contentTypeHeader: "application/x-www-form-urlencoded"

确保不要使用 FormData.fromMap({}) 正常发送数据 object 并且不要忘记在 headers 中包含 application/x-www-form-urlencoded 内容类型。 如果您的服务器是 运行 express,请确保在处理请求之前拥有这些中间件

app.use(express.json())
app.use(express.urlencoded({ extended: true }));