我正在使用路由来处理对我的服务器的 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 to.
错误。
编辑:过滤器
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);
}