来自 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.log
的 path
和查询 {}
都是空的,这意味着我的节点服务器确实在接收数据。
按照@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 }));
我一直在尝试使用 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.log
的 path
和查询 {}
都是空的,这意味着我的节点服务器确实在接收数据。
按照@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 }));