我正在尝试创建一个非常简单的 http 服务器来做一件事。收到 HttpRequest 后,它会在本地数据库服务器上运行一个查询,并根据该查询返回一个字符串。
我正在学习 Dart,但我无法掌握 Futures。我以为我理解它们,但这个例子让我相信我真的不知道它们是如何工作的。所以,我不仅在寻找解决这个问题的方法,而且我也很乐意接受任何指示。
注意:这段代码是我一直在尝试完成的一个非常原始的示例,为了联系 Stackoverflow 社区,我尽可能地缩短/简化了它,同时保持问题完好无损。
这是我的 server.dart 代码
import 'dart:io';
import 'package:sqljocky/sqljocky.dart';
final connection = new ConnectionPool(host: 'localhost', port: 3306, user: 'root', password: null, db: 'server1');
main() {
HttpServer.bind(InternetAddress.ANY_IP_V4, 9090)..then((server) {
print("serving generic database query on localhost:9090");
server.listen((request) {
if (request.method == "GET") {
request.response.write(getResults());
request.response.close();
}
else {
request.response.statusCode = HttpStatus.BAD_REQUEST;
}
});
});
}
String getResults() {
StringBuffer sb = new StringBuffer();
sb.write("START--");
connection.query("select name, email, zkey from users")
..then((results) {
results.forEach((row) {
sb.write(row.toString());
print(row.toString());
});
});
sb.write("--END");
print(sb.toString());
return sb.toString();
}
因此,如果我向该服务器发送请求,它会返回“START----END”。服务器打印出预期的查询结果,然后打印出“START----END”。这使我相信我的请求响应正在关闭并在查询结果处理完成之前返回。
因此,无论我 curl localhost:9090/asdf 还是实际构建客户端 http 请求发送者,我都没有得到我期望的响应......这是一个数据库查询结果。
提前致谢