我试图创建一个非常简单的http服务器做一件事.收到HttpRequest后,它会在本地数据库服务器上运行查询,并根据该查询返回一个字符串.
我正在学习Dart,而且我很难掌握期货.我以为我理解了它们,但是这个例子让我相信我真的不知道它们是如何工作的.所以,我不仅在寻找这个问题的解决方案,而且我也很乐意接受任何指示.
注意:这段代码是我一直试图完成的一个非常原始的例子,为了扩展到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();
} …Run Code Online (Sandbox Code Playgroud) 我想在我的Dart Server应用程序中获取由sqlJocky提供给我的行数据,并将其(使用列名称)转换为Map.IE浏览器.row ['email'] =="somename".
行数据是"_BinaryDataPacket",它是Row类型的扩展.现在,sqlJocky开发人员建议访问数据的方法涉及了解您在数据库中访问的内容的列名:
row.email == "somename"
Run Code Online (Sandbox Code Playgroud)
或者只是忽略列名:
row[0] == "somename"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些黑客来获取列数据,甚至编辑了原始的sqlJockey代码以获取_BinaryDataPacket._fieldIndex以使其公开.虽然这确实让我可以访问Column标题的Symbol实例来构建地图,但我希望尽可能避免修改开发人员的稳定代码.我假设必须有一种简单的方法来获取列名称并将它们放在带有行数据的Map中.
TLDR:我想将alpha.brava =="charle"转换为alpha ["bravo"] =="charle".
谢谢