サーバーへの 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 に POST している 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);
}