gpt4 book ai didi

dart - 在已经收听流后使用 Dart Route 处理 POST 数据

转载 作者:行者123 更新时间:2023-12-01 14:03:29 24 4
gpt4 key购买 nike

我正在使用 route处理对我的服务器的 http 请求。这是我当前的路线代码:

HttpServer.bind("127.0.0.1", 8080).then((server) {
new Router(server)
..filter(new RegExp(r'/.*'), addCorsHeaders)
..filter(new RegExp(r'/admin/.*'), authenticate)
..serve(userGetURL, method: 'GET').listen(userGetHandler)
..serve(userPostURL, method: 'POST').listen(userPostHandler);
});

我正在尝试获取要发布到 URL 的 JSON 数据。数据将用于从数据库中获取实体并将其作为 JSON 返回给调用方。我基本上是在尝试创建一个将处理所有数据的服务器应用程序和一个将显示它的客户端应用程序。

我不知道如何从 POST 中获取数据。我尝试过的所有内容都需要我收听流,但它已经被收听了。这就是我一直试图获取 POST 数据的方式:

userPostHandler(HttpRequest req) {
req.listen((List<int> buffer) {
// Return the data back to the client.
res.write(new String.fromCharCodes(buffer));
res.close();
}
}

问题是我得到一个 Bad state: Stream has already been listened. 错误。

编辑:过滤器

Future<bool> authenticate(HttpRequest req) {
if (req.method == 'POST') {
// Post data is not null
// Authenticate user
String userName = '';
String password = '';
User user = new User();
user.DBConnect().then((User user) {
return new Future.value(user.ValidateUser(userName, password));
});
}
}

Future<bool> addCorsHeaders(HttpRequest req) {
print('${req.method}: ${req.uri.path}');
req.response.headers.add('Access-Control-Allow-Origin', '*, ');
req.response.headers.add('Access-Control-Allow-Methods', 'POST, OPTIONS, GET');
req.response.headers.add('Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept');
return new Future.value(true);
}

最佳答案

我从未使用过 Route 包,但我想知道为什么要在 Handler 内部监听。不能只访问要处理的属性吗?

否则你可以试试

req.asBroadcastStream().listen(...)

BroadcastStream 支持多个监听器。本文中的更多信息 Use Streams for Data

关于dart - 在已经收听流后使用 Dart Route 处理 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com