Я использую 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);
});
Я пытаюсь получить данные JSON, которые я отправляю по URL-адресу. Данные будут использоваться для получения объекта из базы данных и возврата его вызывающей стороне в виде 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.
.
EDIT: фильтры
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);
}
asBroadcastStream()
не было необходимости. - person Günter Zöchbauer   schedule 02.01.2014listen
s. Я думал, что проблема была в..serve(..).listen(userPostHandler)
. Разве это не так? - person coryrwest   schedule 02.01.2014asBroadcastStream()
работать. Ваша ошибка воспроизводится только тогда, когда я также добавляю прослушиватель в обработчик фильтра. - person Günter Zöchbauer   schedule 02.01.2014